2

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 个提要中的每一个创建或不创建“提要状态”记录。是否创建记录取决于预定的时间表,“提要”是否遵守假期,星期几 - 许多标准差异很大,但由算法确定(这里有许多算法)。

我可以编写数百个测试来测试每个“提要”的每个可能结果,但是(a)我认为这是很多工作;(b) 它将无法维护(未来将添加更多“提要”);(c) 我仍在研究算法的启发式方法——总是会出现一些新的或我没有预料到的东西,并且 (d) 我担心我会恢复使用模块使用的相同算法,这些算法测试只有我的打字。

因此,计划是创建一个包含一年中所有日期 x 所有“提要”(34x366)的电子表格矩阵,并手动输入 0 或 1 以指示“提要”当天不应该或应该存在。是的,这有点工作,但是关注我的人会更愿意更改电子表格而不是 ruby​​ 代码,并且任何差异都会出现。

因此,步骤是: 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

在 before 块之后,将进行一些复杂的测试,将 db 与电子表格中的期望值进行比较。

请告诉我这是愚蠢而简单的事情吗?

哦 - bundle exec db rake 的东西是因为我没有 root 可以将 rake 安装到常规 bin 目录中。与 rspec 相同。我将整个事情称为:

bundle exec rspec spec/modules

其中这个 make_expected_spec.rb 是该目录中唯一的文件。我应该说

RAILS_ENV=test bundle exec rspec spec/modules

???

4

1 回答 1

0

复制评论中的答案,以便从“未回答”过滤器中删除此问题:

我刚刚找到一个参考,说不能在 before(:all) 中加载固定装置。我目前正在使用上下文围绕测试集,并在进行任何测试之前在该上下文中加载固定装置,所以这个问题现在是无操作的。

〜回答每个用户1208039

于 2013-10-09T06:40:46.213 回答