在学习 Michael Hartl 的 Rails 教程时,我在测试部分尝试了一些自定义函数,但遇到了令我惊讶的限制。基本上,全局路径变量(例如“root_path”)仅在 RSpec 测试的“描述”块中的“it”部分的“do...end”块中起作用。
我相信以下细节可以归结为一个问题,“it”块有什么特别之处,它使“root_path”能够在那里工作,而不能在“it”块之外工作?
(我已经确定了一个解决方法,但我很好奇这种行为是否有可靠的解释。)
文件: spec/requests/static_pages_spec.rb
这失败了:
require 'spec_helper'
def check_stable(path)
it "should be stable" do
get path
response.status.should be(200)
end
end
describe "StaticPages" do
describe "Home => GET" do
check_stable(root_path)
end
end
这成功了:
require 'spec_helper'
describe "StaticPages" do
describe "Home => GET" do
it "should be stable" do
get root_path
response.status.should be(200)
end
end
end
失败基本上是:
$ bundle exec rspec spec/requests/static_pages_spec.rb
Exception encountered: #<NameError: undefined local variable or method `root_path' for #<Class:0x00000004cecd78>>
...知道为什么吗?
我尝试了关于这两个线程的所有建议:
在我解决上述问题之前,没有任何工作。