3
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吗?

如果我使用@productcreated insidebefore :each@product.reload可以了。

4

1 回答 1

1

如果您在执行 spec 和 call 期间中断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只是一个简单的Hash。我不认为这里有什么花哨的事情。您使用的是什么精确版本的 rails 和 rspec?

于 2012-10-16T12:04:18.737 回答