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 回答