2014-02-04 4 views
0

У меня возникла проблема с получением одного из моих тестовых тестов, пока я не заставил перезагружать объект пользователя после активации. Я довольно новичок в BDD и рельсах, я полностью злоупотребляю заводской девушкой в ​​этом случае? Должен ли я что-то издеваться?RSpec тесты не сработали без перезагрузки factory_girl

Для справки Я использую драгоценный камень колдовства для активации пользователя.

describe "GET activate" do 
    context "with valid attributes" do 
    it "activates a new user" do 
     user = FactoryGirl.create(:pending_user) 
     expect { 
     get :activate, id: user.activation_token 
     user.reload 
     }.to change{user.activation_state}.from("pending").to("active") 
    end 
    end 
end 

ответ

0

Я думаю, что здесь смущает то, как вы запуска активации против, как вы пытаетесь проверить, что он работал.

Вы активируете через контроллер get :activate, но затем проверяете модель user.activation_state. reload необходимо в этом случае, потому что вам необходимо перезагрузить атрибуты из базы данных, чтобы увидеть, что activation_state был изменен с ожидающего на активный. get :activate не влияет на ваш пример user.

Чтобы сделать его более ясным, вы можете:

  1. Проверьте наличие результате активации на странице, которая активирует отвечает или проверить переменную экземпляра контроллера (там, вероятно, @user)
  2. Выполните активацию от вместо этого. Я предполагаю, что это может быть единичный тест, который вместо этого вызывает некоторый метод user.activate(activation_token). Затем будет проверяться экземпляр user без перезагрузки.
+0

Имеет смысл. Все еще пытаясь понять, куда все должно идти в рельсах. Спасибо за вашу помощь. –

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