2

我想编写 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 中工作并使用内置的单元测试框架。

谢谢。

4

2 回答 2

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指令具有克里斯在另一个答案中提到的特殊别名,因此您可以...

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

如果你想更进一步,我推荐Jason Seifer 的 Rake 教程Martin Fowler 的 Using the Rake Build Language文章。两者都很棒。

于 2011-09-11T05:37:45.070 回答
1

您正在尝试插入一个不在字符串中的值,并且您还将rake test:units其视为带有参数的方法调用,但事实并非如此。

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

task :do_unit_tests do
  cd Rails.root
  `rake test:units`
end
于 2011-09-11T05:34:23.820 回答