Я новичок в Ruby, и я пытался изучить Rake, RSpec и Cucumber. Я нашел код, который поможет мне проверить мои задачи Rake, но у меня возникли проблемы с его работой. Мне сказали: http://blog.codahale.com/2007/12/20/rake-vs-rspec-fight/, чтобы отказаться от этого:
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, я получаю следующую ошибку.
АргументError в 'Задача рейка install_grapevine должен установить каталог mygrapevine '
неправильное количество аргументов (1 для 2) /spec/spec _helper.rb: 21: in
instance_eval' /spec/spec_helper.rb: 21:in
block in invoke! ' /spec/spec _helper.rb: 20: ineach' /spec/spec_helper.rb: 20:in
invoke! ' /spec/tasks/rakefile _spec.rb:12:in `block (2 уровня) в
К сожалению, у меня чуть меньше недели рубина под ремнем, так что метапрограммирование вещей над моей головой. Может ли кто-нибудь указать мне в правильном направлении?