Rspec let(:model)+ model.reload不会重新加载模型

时间:2012-07-20 06:27:20

标签: ruby-on-rails rspec rspec2

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

如果我使用@productbefore :each内创建的@product.reload,那就没关系。

1 个答案:

答案 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?