Rails 3.2.1、Ruby 1.9.3p125、rspec 2.8.0、rake 0.9.2.2
Rake :: Task ['namespace:task_name']。invokeはnamespace:task_nameの検索を拒否しました(namespace.rakeはRails.root / lib / tasksにあります)。.execute-同じ。
だから、私はやっています
system 'RAILS_ENV=test bundle exec rake namespace:taskname'
これは機能しているように見えますが、-テストデータベースを使用していません。
私はモジュールを持っていて、Railsフレームワーク内でそのテストを書くように言われました。私はrspecを使用しています。「サンドボックス」環境からフィクスチャを作成するクックブックタスクがあります(「開発」は別の場所にあり、アクセスできません)。フィクスチャは正しく作成されます。
次に、走ってみます
system 'RAILS_ENV=test bundle exec rake db.fixtures.load FIXTURES=<fixture_list>'
テストデータベースにデータがありません。派生元と同じ場所であるサンドボックスデータベースにロードされていると想定しています。
私のモジュールの目的は、データベース内の他のテーブルを調べ、毎日、34個のフィードごとに「feedstatus」レコードを作成するかどうかを確認することです。レコードが作成されるかどうかは、事前に決定されたスケジュール、「フィード」が休日を監視するかどうか、曜日が何であるかによって異なります。多くの基準は大きく異なりますが、アルゴリズムによって決定されます(ここでは多くのアルゴリズム)。
「フィード」ごとに考えられる結果をテストするために数百のテストを作成することもできますが、(a)それは大変な作業だと思います。(b)それは維持不可能です(将来、より多くの「フィード」が追加される予定です)。(c)私はまだアルゴリズムに関するヒューリスティックに取り組んでいます-何か新しいものや予期していなかったものが常に現れていますそして(d)モジュールが使用するのと同じアルゴリズムを使用することに戻るのではないかと心配しています私のタイピングに他なりません。
したがって、計画では、1年のすべての日xすべての「フィード」(34x366)のスプレッドシートマトリックスを作成し、手動で0または1を入力して、「フィード」がその日に存在してはならない、または存在してはならないことを示します。はい、少し手間がかかりますが、私をフォローしている人は、ルビーコードよりもスプレッドシートの変更に慣れており、不一致があれば表示されます。
したがって、手順は次のとおりです。1.空のテストデータベースを準備します2.フィクスチャを作成します(実際のデータへの変更をキャッチするたびに)3。フィクスチャをロードします4.1年分のモジュールを実行します。5.スプレッドシートのエントリごとに、モジュールが作成する、または作成しないレコードの有無に一致させます。
しかし-私は「器具をロードする」ことに固執しています。テストデータベースにデータが読み込まれません。
ちなみに、モジュールを呼び出す
system 'RAILS_ENV=test bundle exec rake namespace:task_that_calls_module'
モジュールがテストデータベースではなくサンドボックス(現在の環境)を使用するようにします。
task_that_calls_moduleにもRAILS_ENV=test name_of_module_method_to_performがあり、テストデータベースではなくサンドボックスを書き込みます。「サンドボックス」は私の実際の開発環境です。
Rails.root / spec / modulesのrspecファイル:
describe "MakeExpected" do
require 'rake'
before(:all) do
system "bundle exec rake testdb:extract_fixtures"
puts "extracted fixtures"
system "bundle exec rake db:test:load"
puts "db:test:load"
system 'RAILS_ENV=test bundle exec rake db:fixtures:load'
puts "loaded fixtures"
system("RAILS_ENV=test bundle exec rake testdb:run_make_expected --trace")
end # before
it "should be true" do
end # should be true
end # describe
Rails.root / lib / tasks / testdb.rakeのtestdb:run_make_expectedタスク:
task :run_make_expected => :environment do
include MakeExpected
RAILS_ENV=test test_scheduler
end # task do
beforeブロックの後、dbをスプレッドシートからの期待値と比較する複雑なテストがいくつかあります。
馬鹿げたシンプルなものだと言ってください。
ああ-bundleexecdb rakeのものは、通常のbinディレクトリにrakeをインストールするためのrootがないためです。rspecと同じです。私はこのすべてを次のように呼び出します。
bundle exec rspec spec/modules
ここで、このmake_expected_spec.rbは、そのディレクトリ内の唯一のファイルです。私は言うべきですか
RAILS_ENV=test bundle exec rspec spec/modules
???