的Rails 3.2.1,红宝石1.9.3p125,rspec的2.8.0,耙0.9.2.2RAILS_ENV =测试,rake任务被忽略RSpec的内运行前:所有
耙::任务[ '命名空间:TASK_NAME' ] .invoke拒绝查找名称空间: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”的纪录。记录是否被创建取决于预定的时间表,“feed”是否观察假期,星期几是哪一天 - 许多标准变化很大,但是算法确定(这里有许多算法)。
我可以写几百个测试,以测试对每个“饲料”,但每一个可能的结果(一)我觉得这是一个很大的工作; (b)将不可维护(将来会增加更多的“饲料”); (三)我还在上对算法启发式扫描 - 新的东西或事情我没有预料到的总是显现和(d)我担心我会恢复到使用该模块使用相同的算法,测试只有我打字。
因此,计划是创建一年中所有天的电子表格矩阵x所有的“饲料”(34x366),并手动将0或1表示“饲料”不应该或应该是那是一个工作,但跟着我的人会更习惯于更换电子表格而不是Ruby代码,并且会出现任何不一致的情况。空测试数据库 2.创建灯具(每次捕捉实际数据的变化) 3.载入灯具 4.运行模块一年的日子 5.对于每个电子表格条目,匹配它存在或缺少该模块将或不会创建的记录。
但是 - 我被困在“加载灯具”。没有数据被加载到测试数据库中。
顺便提及,调用模块
system 'RAILS_ENV=test bundle exec rake namespace:task_that_calls_module'
导致使用沙盒(当前的环境),而不是测试分贝的模块。
的task_that_calls_module还具有RAILS_ENV =测试name_of_module_method_to_perform和仍然写入沙箱,而不是测试分贝。 “沙箱”是我的实际开发环境。
RSpec的文件Rails.root /规格/模块:
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
的TESTDB:在Rails.root/lib目录/任务/ testdb.rake run_make_expected任务:
task :run_make_expected => :environment do
include MakeExpected
RAILS_ENV=test test_scheduler
end # task do
后,在块之前,会有一些令人费解的测试,将db与电子表格的预期进行比较。
请告诉我这是愚蠢和简单的东西?
哦 - bundle exec rake的东西是因为我没有root安装rake到普通的bin目录。与rspec相同。我调用这整个事件为:
bundle exec rspec spec/modules
其中此make_expected_spec.rb是该目录中唯一的文件。我应该说
RAILS_ENV=test bundle exec rspec spec/modules
???
我只注意到我遗漏了需要“投机/ spec_helper”的答案 - 加入它,并没有任何区别。 – Carilda
我刚刚发现一个参考,说不能在之前加载灯具(:all)。我目前正在使用上下文围绕测试集,并在任何测试之前在该上下文中加载fixture,所以现在这个问题是无法运行的。 – Carilda
如果您想要将解决方案作为自己的答案重述一遍,我会删除我的答案。 (请参阅http://meta.stackexchange.com/questions/90263/unanswered-question-answered-in-comments,了解为什么这会有所帮助。)谢谢! – DreadPirateShawn