RAILS_ENV =在rspec之前运行的rake任务中忽略测试:all

时间:2012-06-26 01:12:40

标签: ruby-on-rails rspec rake

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

???

1 个答案:

答案 0 :(得分:0)

从评论中复制答案,以便从&#34;未答复的&#34;中删除此问题。过滤器:

  

我刚刚找到一个参考,说明之前无法加载灯具(:全部)。我目前正在使用上下文围绕测试集,并在任何测试之前在该上下文中加载灯具,所以这个问题现在是无操作。

〜每user1208039

回答