0

Я работаю над проектом RoR с узором и огурцом, и у меня возникла интересная проблема, которую я не совсем понимаю. Я пишу интеграционные тесты (шаги огурца), чтобы проверить разработку и убедиться, что в будущем я не буду этого делать, и я обнаружил какое-то странное поведение:Невозможно использовать методы переменных экземпляра интеграции Rails?

В рамках теста следующий код не работает:

@user = FactoryGirl.create(:user) 
@user.lock_access! 
expect(@user.access_locked?).to be_true 

Вместо этого он возвращает false. Тем не менее, это действительно работает:

expect(User.find(@user.id).access_locked?).to be_true 

Так почему переменная экземпляра не имеет правильную информацию, но когда я тяну из базы данных, это правильно. Я предполагаю, что это действительно правильное поведение с ActiveRecord, но я не совсем понимаю, почему.

Может кто-нибудь объяснить, почему это так? И как очистить этот код немного, если есть способ или что-то доступное для работы @user?

ответ

0

lock_access работает, написав атрибут locked_at, который не будет подхвачен @user, если вы не сделаете перезагрузку.

1

Причиной является экземпляром @user еще относится к существующим в памяти объекта, хотя данные в базе данных действительно изменились.

Для фиксации силы @user перезагружать

@user = FactoryGirl.create(:user) 
@user.lock_access! 
@user.reload 

На самом деле ваше решение по find имеет тот же эффект, как reload.

Смежные вопросы