我正在尝试使用RSpec的宏来干我的规格,我遇到了一个问题。
describe "..." do
let!(:blog) { create(:blog) }
post "/blogs/#{blog.id}/posts" do
# some macros
end
end
我希望能够访问blog
变量,但我不想在it { ... }
块内执行此操作,因此无论资源如何都可以使用我的宏(例如我想应用它)到blogs
,posts
,comments
等。
有可能吗?
答案 0 :(得分:3)
我想访问博客变量,但我不希望在{...}块
中进行访问
尽量不要将let
视为通常范围的变量定义。 let
是a complex helper method for caching the result of a code block across multiple calls within the same example group。您let
仅 的任何内容都存在于示例组中,这意味着您无法访问let
块之外的it
ted“变量”。
require 'spec'
describe "foo" do
let(:bar) { 1 }
bar
end
# => undefined local variable or method `bar'
也就是说,如果你只是想在多个例子中重用create(:blog)
的结果,你可以这样做:
describe "foo" do
let(:blog) { create(:blog) }
it "does something in one context" do
post "/blogs/#{blog.id}/posts"
# specification
end
it "does something else in another context" do
post "/blogs/#{blog.id}/comments"
# specification
end
end