2012-06-26 42 views
2

的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 

???

+0

我只注意到我遗漏了需要“投机/ spec_helper”的答案 - 加入它,并没有任何区别。 – Carilda

+1

我刚刚发现一个参考,说不能在之前加载灯具(:all)。我目前正在使用上下文围绕测试集,并在任何测试之前在该上下文中加载fixture,所以现在这个问题是无法运行的。 – Carilda

+0

如果您想要将解决方案作为自己的答案重述一遍,我会删除我的答案。 (请参阅http://meta.stackexchange.com/questions/90263/unanswered-question-answered-in-comments,了解为什么这会有所帮助。)谢谢! – DreadPirateShawn

回答

0

复制从意见的答案,以从“未答复”过滤器中删除了这个问题:

我刚刚发现一个人说不能在之前加载夹具参考(:所有)。我目前正在使用上下文围绕测试集,并在任何测试之前在该上下文中加载fixture,所以现在这个问题是无法运行的。

〜每user1208039