我想编写 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 中工作并使用内置的单元测试框架。
谢谢。
我想编写 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 中工作并使用内置的单元测试框架。
谢谢。
没有必要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
指令具有克里斯在另一个答案中提到的特殊别名,因此您可以...
task :do_unit_tests do
cd Rails.root
Rake::Task['test:units'].invoke
end
如果你想更进一步,我推荐Jason Seifer 的 Rake 教程和Martin Fowler 的 Using the Rake Build Language文章。两者都很棒。
您正在尝试插入一个不在字符串中的值,并且您还将rake test:units
其视为带有参数的方法调用,但事实并非如此。
更改该cd
行,以便您使用 的值调用该方法Rails.root
,并将第二行更改为 shell 指令。
task :do_unit_tests do
cd Rails.root
`rake test:units`
end