2011-04-17 75 views
2

我只是最近更新我的模型attr_accessible領域,突然一些測試將無法正常工作,如我所料。但是,我有一個像規格:這是由attr_accessible造成的嗎?

context "when user buys a game item" do 
    let(:inventory) {@user.inventory << Factory(:inventory)} 

    it "should present an error if the id ..." do 
    GameItem.stub(:find_by_id).and_return(Factory(:game_item)) 
    @user.inventory.should == 1 # TEST 
    post :buy, :id => (game_item.id + 1) 
    flash[:error].should == I18n.t('error.invalid_post') 
    response.should redirect_to melee_url('Weapon') 
    end 
end 

@user.inventory.should == 1只是一個檢查,我現在做。由於某種原因,庫存爲nil。這是否因<<操作而發生?由於用戶模型的inventory_id屬性,我猜測這很可能。

我不得不說,attr_accessible通常看起來像一個黑客給我,我有點不喜歡它,但我可以明白爲什麼它應該使用。你認爲是這樣嗎?如果是這樣,我該如何避開這張支票?

回答

2

let是懶惰的;它不會調用該塊,除非使用了您定義的變量,並且我沒有看到您在任何地方訪問inventory。您訪問@user.inventory,但這不是一回事。

要麼丟失let的定義,只是把它放在你的it區塊中,或者確保在確定它做到了它應該做的之前先確定先調用它。

+0

是的,我實際上修正了它,是一個混合的事情,包括@ user.inventory。 thanx :) – Spyros 2011-04-18 00:31:24