Как вы пишете задачу для запуска тестов в Rails 3? - PullRequest
2 голосов
/ 11 сентября 2011

Я хотел бы написать грабли для настройки тестов. Например, для запуска модульных тестов я создал файл со следующим кодом и сохранил его как 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 ]

3 голосов
/ 11 сентября 2011

Нет необходимости cd. Вы можете просто ...

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

Но если вы действительно хотите cd, вот как вы называете инструкции оболочки:

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

Если вы хотите пойти дальше, я рекомендую Уроки Джейкса Сайфера по граблям и Статьи Мартина Фаулера по использованию языка Rake Build . Оба великолепны.

1 голос
/ 11 сентября 2011

Вы пытаетесь интерполировать значение, которого нет в строке, и вы также обрабатываете rake test:units, как если бы это был вызов метода с аргументами, а это не так.

Измените cdТаким образом, вы вызываете метод со значением Rails.root и меняете вторую строку на инструкцию оболочки.

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