нулевой объект ответа в Rails 5.2, спецификация RSpec-Rails 3.7 для запроса GET - PullRequest
0 голосов
/ 05 июля 2018

Меня это не устраивает, и я чувствую, что, возможно, совершаю простую ошибку, но я не смог найти никакой информации по этой проблеме.

У меня есть некоторые спецификации запросов для Rails 5 и, когда я тестирую на перенаправление - но не на визуализированный шаблон - я получаю ошибку, undefined method 'response_code' for nil:NilClass. Причина этого заключается в том, что @response равно nil, когда вызывается сопоставитель (внутри кода ActionDispatch :: Assertions :: ResponseAssertions, а не в моем коде). Я могу использовать cURL, чтобы сделать запрос к API, и он возвращает ответ, как и ожидалось. Точка возврата ошибки находится здесь (это код ActionDispatch):

def generate_response_message(expected, actual = @response.response_code)
  "Expected response to be a <#{code_with_name(expected)}>,"\
  " but was a <#{code_with_name(actual)}>"
  .dup.concat(location_if_redirected).concat(response_body_if_short)
end

Обратите внимание на первую строку, где значение по умолчанию для параметра actual установлено на @response.response_code.

Вот мой тестовый код:

RSpec.describe "Admin registrations", type: :request do
  describe "new sign-up" do
    subject { get new_admin_registration_path }

    it "redirects to home" do
       expect(subject).to redirect_to(new_admin_session_path)
    end
  end
end

Соответствующие строки в журнале испытаний:

Started GET "/admins/sign_up" for 127.0.0.1 at 2018-07-05 10:44:05 -0700
Processing by Admins::RegistrationsController#new as HTML
Redirected to http://example.org/admins/sign_in
Completed 301 Moved Permanently in 18ms (ActiveRecord: 0.0ms)

Интересно, что когда я использую byebug для проверки значения subject, он возвращает объект Rack :: MockResponse, так что это как-то не проходит.

Любая помощь, которую я могу получить, очень ценится!

1 Ответ

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

Я уверен, что вы, вероятно, уже решили эту проблему, но для всех, кто может наткнуться на это, мы столкнулись с тем же (response не назначается после выполнения запроса - либо get, либо post, не пробовал другие методы, но предположил, что все они будут одинаковыми). Все существующие спецификации запросов, которые работали, начали давать сбой.

Виновник в нашем случае был отслежен до модуля, который требовался в rails_helper.rb, и был добавлен в список config.include rspec:

config.include ApiHelper, type: request

Внутри AppHelper была основная причина:

include Rack::Test::Methods

Комментируя эту строку (и, в конечном счете, для нас, удалив весь помощник, поскольку он не был действительно необходим), восстановил спецификации запроса до их предыдущего и рабочего состояния.

ТЛ; др:

Убедитесь, что вы случайно не включили Rack::Test::Methods в config.include для конфигурации rspec.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...