8

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

我还添加了这段代码,基于阅读test.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:services运行测试 test/services但是,rake test不会运行这些测试。看起来应该;这是代码

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

我忽略了什么吗?

4

4 回答 4

11

在您的测试任务定义之后添加这样的一行:

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

我不知道为什么它们没有自动被拾取,但这是我发现的唯一适用于 Test::Unit 的解决方案。

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

于 2013-03-06T21:00:15.527 回答
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
于 2014-04-25T13:52:50.640 回答
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对您有用。

于 2014-06-24T18:29:30.213 回答
3

或者干脆跑rake test:all

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

namespace :test do
  task run: ['test:all']
end
于 2014-07-15T01:26:10.907 回答