rake:测试没有在子目录中运行自定义测试

时间:2013-03-06 20:06:24

标签: ruby-on-rails testing testunit ruby-on-rails-4

我正在使用Rails 4.0.0.beta1。我添加了两个目录:app/servicestest/services

我还根据阅读testing.rake of railties添加了此代码:

namespace :test do
  Rake::TestTask.new(services: "test:prepare") do |t|
    t.libs << "test"
    t.pattern = 'test/services/**/*_test.rb'
  end
end

我发现rake test:servicestest/services中运行测试;但是,rake test不运行这些测试。看起来它应该 ;这是code

Rake::TestTask.new(:all) do |t|
  t.libs << "test"
  t.pattern = "test/**/*_test.rb"
end

我忽略了什么吗?

4 个答案:

答案 0 :(得分:11)

在测试任务定义后添加如下所示的行:

Rake::Task[:test].enhance { Rake::Task["test:services"].invoke }

我不知道他们为什么不会被自动捡起来,但这是我发现适用于Test :: Unit的唯一解决方案。

我认为如果您要运行rake test:all,它会运行您的其他测试,但如果没有上面的代码段,rake test就不会。

答案 1 :(得分:4)

对于那些使用更新的Rails版本(在我的情况下为4.1.0)的人

使用Rails::TestTask代替Rake::TestTask并覆盖run任务:

namespace :test do
  task :run => ['test:units', 'test:functionals', 'test:generators', 'test:integration', 'test:services']
  Rails::TestTask.new(services: "test:prepare") do |t|
    t.pattern = 'test/services/**/*_test.rb'
  end
end

答案 2 :(得分:3)

Jim的解决方案有效,但它最终将额外的测试套件作为一个单独的任务运行,而不是作为整体的一部分(至少使用Rails 4.1)。因此测试统计数据运行两次而不是聚合。我不觉得这是你想要的行为。

这就是我最终解决这个问题的方法(使用Rails 4.1.1)

# Add additional test suite definitions to the default test task here

namespace :test do
  Rails::TestTask.new(extras: "test:prepare") do |t|
    t.pattern = 'test/extras/**/*_test.rb'
  end
end

Rake::Task[:test].enhance ['test:extras']

通过在test:extras执行的任务集中包含新的rake test任务,当然还有默认的rake,这可以产生完全预期的行为。您可以使用此方法以这种方式添加任意数量的新测试套件。

如果您使用的是Rails 3,我相信只需更改为Rake::TestTask即可。

答案 3 :(得分:3)

或者只是运行rake test:all

如果要默认运行所有测试,请覆盖测试任务:

namespace :test do
  task run: ['test:all']
end