Это вызвано attr_accessible? - PullRequest
       21

Это вызвано attr_accessible?

2 голосов
/ 18 апреля 2011

Я только недавно обновил свою модель полями 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 модели User.

Я должен сказать, что attr_accessible обычно кажется мне хаком, и мне это не нравится, хотя я понимаю, почему его следует использовать. Как вы думаете, это так? Если так, как я могу избежать этой проверки?

1 Ответ

2 голосов
/ 18 апреля 2011

let ленив; он не будет вызывать блок, пока не будет использована определяемая вами переменная, и я не вижу, чтобы вы обращались к inventory где-либо еще. Вы получаете доступ к @user.inventory, но это не одно и то же.

Либо потеряйте определение let и просто поместите его в свой блок it, либо обязательно вызовите его сначала, прежде чем удостовериться, что он сделал то, что предполагалось.

...