Ожидается, что ответ будет иметь код состояния 200, но он был 302 в тесте запросов в rsepc - PullRequest
0 голосов
/ 26 июня 2018

Я нашел много похожих вопросов, опубликованных другими, но ни одно из решений не сработало.

Мой /spec/requests/questions_spec.rb равен

require 'rails_helper'
RSpec.describe "Questions", type: :request do
  describe "GET /questions" do
    it "works! (now write some real specs)" do
      get questions_path
      expect(response).to have_http_status(200)
    end
  end
end

Теперь моя ошибка rspec

Questions GET /questions works! (now write some real specs)
 Failure/Error: expect(response).to have_http_status(200)
   expected the response to have status code 200 but it was 302
 # ./spec/requests/questions_spec.rb:7:in `block (3 levels) in <top (required)>'

Кто-нибудь может мне помочь? Как настроить код состояния 200?

Ответы [ 3 ]

0 голосов
/ 26 июня 2018

Я думаю, вам не хватает аутентификации.

использование login_user

https://github.com/plataformatec/devise/wiki/How-To:-Test-controllers-with-Rails-3-and-4-%28and-RSpec%29#controller-specs

0 голосов
/ 15 декабря 2018

У меня та же проблема, что-то вроде expected the response to have a success status code (2xx) but it was 302 Когда я исправил этот код

, опишите "GET #index" do

  it "returns http success" do
    get :index
    expect(response).to have_http_status(:success)
  end
end

Вы знаете, что я не использовал deviceпоэтому я не мог использовать чертовски login_user и, к сожалению, я уже полностью забыл, как реализовать реализацию входа в систему.Но каким-то образом сохраняется состояние входа в систему с помощью session.Так я и сделал, и работает.

опишите "GET #index" do

  it "returns http success" do

      admin = User.create(name:  "admin@gmail.com",
           email: "admin@gmail.com",
           password:              "admin@gmail.com",
           password_confirmation: "admin@gmail.com",
           admin:     true,
           activated: true,
           activated_at: Time.zone.now)

      session[:user_id] = admin.id

    get :index
    expect(response).to have_http_status(:success)
  end

end
0 голосов
/ 26 июня 2018

302 - Found.Я думаю, что вы используете рельсовые леса.Синтаксис скаффолда возвращает состояние 302 для метода get.Если вам нужно 200. Вы можете настроить свой код.

...