2

最近、モデルを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なぜか在庫があります。<<手術のせいでしょうか?User モデルの inventory_id 属性により、これが最も可能性が高いと思います。

私はそれがattr_accessible一般的にハックのように思えて、私はちょっと好きではないと言わざるを得ませんが、なぜそれを使うべきかはわかります。これは事実だと思いますか?もしそうなら、どうすればそのチェックを避けることができますか?

4

1 に答える 1

2

let怠け者です。inventory定義している変数が使用されない限り、ブロックは呼び出されず、どこにもアクセスしていません。にアクセスします@user.inventoryが、それは同じことではありません。

定義を失ってブロックletに入れるitか、それが想定されていることを確認する前に、最初にそれを呼び出すようにしてください。

于 2011-04-17T23:34:18.187 に答える