В Rails 3 я получаю NoMethodError для повторного использования! метод во время тестирования - PullRequest
22 голосов
/ 02 октября 2010

У меня есть функциональный тест, который использует приборы.Я также использую светильники в своих юнит-тестах, но они работают без ошибок.При выполнении функциональных тестов я получаю:

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 включает в себя все приборы, поэтому приборы Responses определенно загружаются.И, как я уже сказал, приборы отлично работают в модульных тестах.

Есть идеи, что может быть причиной этого?

Ответы [ 3 ]

44 голосов
/ 15 ноября 2010

Измените

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 / @ маршруты и все должно работать.

2 голосов
/ 13 мая 2014

У меня просто была похожая проблема с именованием переменной @request.Я изменил на @_request, и это решило проблему.

2 голосов
/ 26 августа 2011

Ответ Flo в основном правильный, но я просто хотел уточнить:

В Rails 3.0.x ожидается, что @request будет типом ActionController::TestRequest, для которого определен метод recycle!,Есть TestResponse, TestRequest и TestSession.

Возможно, вы захотите фактически инициализировать или манипулировать объектами этих типов в определенных ситуациях.В моем случае мне нужно было смоделировать сайт, имеющий определенное доменное имя с

@request = ActionController::TestRequest.new unless @request
@request.host = "www.hostname.com"
...