2015-12-23 2 views
0

Я новичок в рельсах и начинаю с создания своего первого набора тестов.Неисправность при тестировании: ожидаемый ответ был <redirect>, но был <200>

В моих тестах я получаю следующую неудачу:

Expected response to be a <redirect>, but was <200> 

Этот ответ является странным, так как редирект явно работает при тестировании с помощью браузера. Кто-нибудь имеет представление о том, что может происходить здесь, или о том, что лучше всего подходит для диагностики такой проблемы. Например, есть ли способ узнать, на какой странице было отправлено 200 сообщений.

Тестовый скрипт (user_controller_test.rb)

test "when correct should redirect to dashboard" do 
    log_in_as(@user_one) 
    assert_redirected_to dashboard_url 
end 

Полный консоли сообщение

FAIL["test_should_get_dashboard_when_correct_user", UsersControllerTest, 2015-12-23 18:06:20 +1100] 
test_should_get_dashboard_when_correct_user#UsersControllerTest (1450854380.57s) 
Expected response to be a <redirect>, but was <200> 
test/controllers/users_controller_test.rb:27:in `block in <class:UsersControllerTest>' 

Контроллер:

class SessionsController < ApplicationController 

def create 
    user = User.find_by(email: params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:password]) 

      log_in user   
      params[:session][:remember_me] == '1' ? remember(user) : forget(user) 
      redirect_back_or dashboard 
    else 
     flash.now[:danger] = 'Invalid email/password combination' 
     render 'new' 
    end 
    end 
+0

Я думаю, что что-то отличается от теста вашего контроллера и ручного тестирования в браузере. –

+0

Какое содержимое страницы вы возвращаете с 200? Осмотрите его, и это может привести к решению. –

+0

Можете ли вы добавить свой контроллер/действие? –

ответ

2

У вас есть дефектный тест.

Это то, что код в ваш контроллер говорит:

if user && user.authenticate(params[:session][:password]) 
    redirect_back_or dashboard 
else 
    render 'new' 
end 

# if user is not nil AND user can authenticate with given params 
    # success (redirect) 
# else the params passed to the controller did not authenticate the user 
    # fail (render 200) 

Тогда ваш тест говорит:

log_in_as(@user_one) 
assert_redirected_to dashboard_url 

# login user manually, rather than assign params 
# check if the controller action redirected, meaning check if it could authenticate with the given params that you did not assign 

Смотрите эту проблему? Вам нужно установить параметры, которые проверяет действие контроллера, если вы хотите, чтобы он передал оператор if.

+0

Да, я думаю, что это то, что есть. Я не должен ожидать перенаправления, так как это действие контроллера (create), а не метод login_in_as, который инициирует перенаправление. – Matthias