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

#ruby-on-rails #rspec #attr-accessible

#ruby-on-rails #rspec #attr-доступный

Вопрос:

Я только недавно обновил свою модель с 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 мне это вообще кажется взломом, и мне это вроде как не нравится, хотя я понимаю, почему это следует использовать. Вы думаете, это так? Если да, то как я могу избежать этой проверки?

Ответ №1:

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

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

Комментарии:

1. да, я действительно это исправил, происходило смешение вещей, включая @user.inventory . спасибо 🙂