Меня это не устраивает, и я чувствую, что, возможно, совершаю простую ошибку, но я не смог найти никакой информации по этой проблеме.
У меня есть некоторые спецификации запросов для 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, так что это как-то не проходит.
Любая помощь, которую я могу получить, очень ценится!