2016-10-06 2 views
0

Я знаю, что многие другие пользователи опубликовали свою проблему с тем же заголовком. И я тоже пробовал все их решения. Но, несмотря на все попытки, я не могу добраться до решения.Ожидаемый ответ был <redirect>, но был <200> in Controller test in Rspec

messages_controller_spec:

context 'with valid attributes' do 
    before :each do 
    user = FactoryGirl.create :user 
    sign_in user 
    end 
    it 'redirects to the root page' do 
    xhr :post, :create, messages: attributes_for(:message) 
    expect(response).to redirect_to root_path 
    end 
end 

Теперь Мой MessageController:

def create 
    @message = current_user.messages.build(message_params) 
    @recipients = User.all 
    if @message.save 
    redirect_to root_path, notice: "Message Sent!" #The test fails here 
    else 
    flash[alert] = "Great Scott!" 
    render :new 
    end 
end 

Запуск RSpec из консоли дает следующее сообщение об ошибке:

Failure/Error: expect(response).to redirect_to root_path Expected response to be a <:redirect> but was <200>

Я также проверил журнал/тест .rb. Перенаправление выполнено успешно. Но ответ еще 200 вместо 3xx:

[1m[36m (0.3ms)[0m [1mSAVEPOINT active_record_1[0m
[1m[35mSQL (1.4ms)
[0m INSERT INTO "messages" ("body", "sender_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4) RETURNING "id" [["body", "MyText"], ["sender_id", 1], ["created_at", "2016-10-06 11:16:14.934487"], ["updated_at", "2016-10-06 11:16:14.934487"]]
[1m[36m (0.3ms)[0m [1mRELEASE SAVEPOINT active_record_1[0m
Redirected to http://test.host/
Completed 200 OK in 40ms (ActiveRecord: 5.9ms) [1m[35m (0.6ms)[0m ROLLBACK

ответ

2

Вы используете xhr так дать 200

Попробуйте После

+0

Спасибо человеку! Такая глупая ошибка ... –

+0

Да, это так. Можете ли вы объяснить, в какой ситуации xhr будет работать и почему он здесь не работает? –

+0

@NovneetNov, когда ваш запрос является запросом ajax, в этом случае вы используете 'xhr'. Но здесь ваш запрос не является ajax-запросом. это простой почтовый запрос, и после успеха он перенаправляется на root_path. –

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