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ますか?

内部で@product作成されたものを使用before :each@product.reloadても問題ありません。

4

1 に答える 1

1

spec の実行中に中断して を呼び出すと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 のどの正確なバージョンを使用していましたか?

于 2012-10-16T12:04:18.737 に答える