Rails 3.2.1,Ruby 1.9.3p125,rspec 2.8.0,rake 0.9.2.2
Rake :: Task ['namespace: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”记录。是否创建记录取决于预定的时间表,“馈送”是否观察假日,一周中的哪一天 - 许多标准变化很大但是在算法上确定(这里有许多算法)。
我可以写几百个测试来测试每个“饲料”的每个可能的结果,但(a)我认为这是很多工作; (b)它是不可维修的(将来会增加更多“饲料”); (c)我还在研究关于算法的启发式方法 - 一些新的东西或者我没想到的东西总是会出现;(d)我担心我会恢复使用模块使用的相同算法,哪些测试只不过是我的打字。
所以,计划是创建一年中所有日期x所有“Feed”(34x366)的电子表格矩阵,并手动输入0或1表示“feed”不应该或应该在那里那一天。是的,这是一些工作,但跟随我的人会更改电子表格而不是红宝石代码,并且会出现任何差异。
所以,步骤是: 1.准备空的测试数据库 2.创建灯具(每次捕捉真实数据的变化) 3.加载灯具 4.运行模块一年的价值。 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
在前一个块之后,将会有一些比较数据库与电子表格中的期望值进行比较的复杂测试。
请告诉我这是愚蠢和简单的事情?
哦 - 捆绑exec db rake的东西是因为我没有root将rake安装到常规bin目录中。与rspec相同。我把这整件称为:
bundle exec rspec spec/modules
其中make_expected_spec.rb是该目录中唯一的文件。我应该说
RAILS_ENV=test bundle exec rspec spec/modules
???
答案 0 :(得分:0)
从评论中复制答案,以便从&#34;未答复的&#34;中删除此问题。过滤器:
回答我刚刚找到一个参考,说明之前无法加载灯具(:全部)。我目前正在使用上下文围绕测试集,并在任何测试之前在该上下文中加载灯具,所以这个问题现在是无操作。