你如何编写一个在Rails 3中运行测试的任务?

时间:2011-09-11 05:28:10

标签: ruby-on-rails ruby-on-rails-3 unit-testing rake-task rake-test

我想写rake任务来定制测试。例如,要运行单元测试,我使用以下代码创建了一个文件,并将其保存为lib / tasks / test.rake:

task :do_unit_tests do
  cd #{Rails.root} 
  rake test:units
end

正在运行rake do_unit_tests会引发错误:can't convert Hash into String

使用Rails 3.0.7并使用内置的单元测试框架。

感谢。

2 个答案:

答案 0 :(得分:3)

无需cd。你可以简单地......

task :do_unit_tests do
  Rake::Task['test:units'].invoke
end

但是如果你真的想要cd,那就是你如何调用shell指令:

task :do_unit_tests do
  sh "cd #{Rails.root}"
  Rake::Task['test:units'].invoke
end

嗯,实际上有一个较短的版本。 cd指令在另一个答案中提到了Chris的特殊别名,所以你可以......

task :do_unit_tests do
  cd Rails.root
  Rake::Task['test:units'].invoke
end

如果您想更进一步,我建议您使用Jason Seifer's Rake TutorialMartin Fowler's Using the Rake Build Language条款。两者都很棒。

答案 1 :(得分:1)

您正在尝试插入一个不在字符串中的值,并且您也将rake test:units视为带参数的方法调用,而不是。{/ p>

更改cd行,以便您使用值Rails.root调用方法,并将第二行更改为shell指令。

task :do_unit_tests do
  cd Rails.root
  `rake test:units`
end