我是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文件中。
我已经成功将此代码提取出来,在我的cucumber步骤中运行,如下所示:
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中让事情运转起来时,我会遇到以下错误:
参数错误,Rake任务install_grapevine应该安装到mygrapevine目录
错误的参数数量(1个参数,需要2个) /spec/spec_helper.rb:21:
instance_eval' /spec/spec_helper.rb:21:
invoke!'中的块 /spec/spec_helper.rb:20:each' /spec/spec_helper.rb:20:
invoke!' /spec/tasks/rakefile_spec.rb:12:在`block (2 levels) in'处
不幸的是,我只学了不到一周的 Ruby,所以元编程的东西超出了我的理解范围。有人能指点一下我吗?