Я новичок в Ruby, и я пытался научиться Rake, RSpec и Cucumber. Я нашел код, который поможет мне проверить мои задачи Rake, но у меня возникли проблемы с его работой. Мне сказали, что здесь: http://blog.codahale.com/2007/12/20/rake-vs-rspec-fight/ бросить это:Тестирование задачи рейка в rspec (и огурце)
def describe_rake_task(task_name, filename, &block)
require "rake"
describe "Rake task #{task_name}" do
attr_reader :task
before(:all) do
@rake = Rake::Application.new
Rake.application = @rake
load filename
@task = Rake::Task[task_name]
end
after(:all) do
Rake.application = nil
end
def invoke!
for action in task.instance_eval { @actions }
instance_eval(&action)
end
end
instance_eval(&block)
end
end
в мой файл spec_helper.rb.
мне удалось взять этот код, и запустить его в моих шагах огурца, как это:
When /^I run the update_installers task$/ do
@rake = Rake::Application.new
Rake.application = @rake
load "lib/tasks/rakefile.rb"
@task = Rake::Task["update_installers"]
for action in @task.instance_eval { @actions }
instance_eval(&action)
end
instance_eval(&block)
Rake.application = nil
end
, но когда я пытаюсь получить вещи, работающие в RSpec, я получаю следующее сообщение об ошибке.
ArgumentError в 'Rake задача install_grapevine следует установить в директория mygrapevine'
неверное число аргументов (1 для 2) /spec/spec_helper.rb: 21: в
instance_eval' /spec/spec_helper.rb: 21:in
блоке в Invoke! ' /spec/spec_helper.rb: 20: ineach' /spec/spec_helper.rb: 20:in
invoke! ' /spec/tasks/rakefile_spec.rb:12:in `блок (2 уровня) в '
К сожалению, у меня как раз под неделю рубина под поясом, поэтому метапрограммированием материал над моя голова. Может ли кто-нибудь указать мне в правильном направлении?
такой же без RSpec: http://stackoverflow.com/questions/3530/how-do-i-rake-tasks-within-a-ruby-script –