Я работаю над своим первым сложным тестом, и мне нужна помощь. Мне нужно создать пользователя, подписать его и заполнить форму как он. Страница выдает ошибку: undefined method first_name for nil:nilClass
Отправить переменную для просмотра по запросу spec
Обе функции являются довольно легко, вот тест:
it "simulates creator onboard" do
@user = FactoryGirl.create(:user)
puts @user.onboard_token.size
visit onboard_path(:token => @user.onboard_token)
puts @user.nil?
expect(@user.active).to eq(false)
click_on('step-forward')
find('input[name="user[password"]').set "12345678"
find('input[name="user[password_confirmation"]').set "12346578"
find('input[name="commit"]').click
expect(response).to redirect_to(root_path)
expect(@user.active).to eq(true)
конец
А вот функция регулятора:
def onboard
authorize(:user, :onboard?)
if params[:token].present?
if params[:token] != nil && params[:token].size == 40 && !User.where(onboard_token: params[:token]).empty?
@user = User.find_by_onboard_token(params[:token])
end
if [email protected]?
sign_in(:user, @user)
@brand = @user.profile
sign_out(:user)
end
else
sign_out(:user)
redirect_to root_path
end
конец
По какой-то причине, похоже, что @user
переменная не передается в представление. Я убедился, что это не ноль, убедитесь, что вы используете правильные функции capybara, но все же, @user - это нуль.
Я что-то пропустил?
Пробовали ли вы отладки это? Удостоверьтесь, что ваши 'params [: token]! = Nil && params [: token] .size == 40 &&! User.where (onboard_token: params [: token]). Empty?' Оценивается как true, а @user присваивается начните с, дайте мне знать, если это не проблема. – IKA
Одна из проблем заключается в том, что переменную '@ user' в вашем тесте нужно перезагрузить с помощью' @ user.reload', чтобы просмотреть изменения, внесенные в базу данных вашим приложением , '@ vars' - это переменные экземпляра, а не глобальные, и даже если это ваш тест, а тестируемое приложение часто выполняется в разных потоках. – max
Аплодисменты из этого рода беспорядок. Если вы можете сказать нам в простых выражениях («Когда пользователь нажимает X - Y должен произойти»), то, что должно выполнить ваше действие контроллера, мы можем вам помочь. – max