我正在使用Rails 4.0.0.beta1。我添加了两个目录:app/services
和test/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:services
在test/services
中运行测试;但是,rake test
不运行这些测试。看起来它应该 ;这是code:
Rake::TestTask.new(:all) do |t|
t.libs << "test"
t.pattern = "test/**/*_test.rb"
end
我忽略了什么吗?
答案 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