let(:product) { FactoryGirl.create(:product) }
it "should blah" do
product.name = "a"
product.save!
post :update, id: product.id, product: { name: "x" }
# assuming :update changes the product's name to params[:name]
product.reload.name.should == "x"
end
should
总是会失败,除非我做
Product.find(product.id).name.should == "x"
我是否误用let
?
如果我使用@product
和before :each
内创建的@product.reload
,那就没关系。
答案 0 :(得分:0)
如果您在执行规范期间中断并致电self.class.method(:let).source
,您会得到类似的内容:
def let(name, &block)
define_method(name) do
__memoized.fetch(name) {|k| __memoized[k] = instance_eval(&block) }
end
end
经过进一步检查,__memoized
只是一个简单的哈希。我不认为这里有什么花哨的东西。您使用哪些精确版本的rails和rspec?