我想写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并使用内置的单元测试框架。
感谢。
答案 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 Tutorial和Martin 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