Ruby on rails 如何编写一个任务来运行Rails3中的测试?
我想编写rake任务来定制测试。例如,为了运行单元测试,我使用以下代码创建了一个文件,并将其保存为lib/tasks/test.rake:Ruby on rails 如何编写一个任务来运行Rails3中的测试?,ruby-on-rails,ruby-on-rails-3,unit-testing,rake-task,rake-test,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\u unit\u测试会抛出一个错误:无法将哈希转换为字符串 使用Rails 3.0.7并使用内置单元测试框架 谢谢。您正在尝试插入一个不在字符串中的值,并且您还将rake test:units视为一个带有参数
task :do_unit_tests do
cd #{Rails.root}
rake test:units
end
运行rake do\u unit\u测试
会抛出一个错误:无法将哈希转换为字符串
使用Rails 3.0.7并使用内置单元测试框架
谢谢。您正在尝试插入一个不在字符串中的值,并且您还将
rake test:units
视为一个带有参数的方法调用,而事实并非如此
更改cd
行,以便使用Rails.root
值调用该方法,并将第二行更改为shell指令
task :do_unit_tests do
cd Rails.root
`rake test:units`
end
不需要
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
如果你想更进一步的话,我推荐和文章。两者都很好。这会引发一个错误:
未定义的局部变量或main:Object的方法“units”
。我只读取并修复了第一行。我现在将第二行更新为系统命令,因此代码中没有错误。尽管如此,还是有更合适的方法可以做到这一点,如前所述。这也引发了一个错误。添加--trace
将显示rake中止!命令失败,状态为(1):[/home/baller/.rvm/rubies/ruby-1.9.2-p180/b..]/home/baller/.rvm/gems/ruby-1.9.2-p180/gems/rake-0.8.7/lib/rake.rb:995:in'block in sh'
我想您可以突出显示以下句子:“不需要cd”。我要说的是,如果不使用块调用它,也可能有点危险,因为它会(如果它不是相同的话)更改所有其他操作的当前目录。而且,您第一次建议使用sh“cd…”
也不起作用,因为只有在shell的新进程中,路径才会更改,该进程在目录更改后立即结束。