В Rails 3 я получаю NoMethodError для утилизации! метод во время тестирования
У меня есть функциональный тест, который использует приспособления. Я также использую приборы в своих модульных тестах, но они работают без ошибок. При выполнении функциональных тестов я получаю:
NoMethodError: undefined method 'recycle!' for #<Response:0x10346be10>
/test/functional/responses_controller_test.rb:10:in 'test_testing'
Мои функциональные тесты, на данный момент, делают не что иное, как переход к действию индекса. Пример:
setup do
@response = responses(:one)
end
test "testing" do
get :index
assert true
end
В моем классе TestHelper есть все приборы, поэтому элементы Ответы определенно загружаются. И, как я уже сказал, светильники отлично работают в модульных тестах.
Любая идея, что может быть причиной этого?
Ответы
Ответ 1
Изменить
setup do
@response = responses(:one)
end
к
setup do
@myresponse = responses(:one)
end
и вы сходите!
Проблема заключается в "actionpack-3.0.1/lib/action_controller/test_case.rb" по строке 386.
В тестовом примере предполагается, что @response содержит "ActionDispatch:: Response". Вы перезаписываете его, он больше не "ActionDispatch:: Response", и тестовый файл не работает.
Я не уверен, что это предполагаемое поведение.
В любом случае, просто убедитесь, что вы не перезаписываете @response/@request/@controller/@routes, и он должен работать.
Ответ 2
Ответ Flo в основном правильный, но я просто хотел уточнить:
В Rails 3.0.x предполагается, что @request будет иметь тип ActionController::TestRequest
, который имеет метод recycle!
, определенный на нем. Там TestResponse
, TestRequest
и TestSession
.
Возможно, вы захотите инициализировать или управлять объектами этих типов для определенных ситуаций. В моем случае мне нужно было высмеять сайт с определенным доменным именем с помощью
@request = ActionController::TestRequest.new unless @request
@request.host = "www.hostname.com"
Ответ 3
У меня была аналогичная проблема, назвавшая переменную @request
.
Я изменился на @_request
, и он решил проблему.