#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 . спасибо 🙂