Подтвердить что ты не робот

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

Любая идея, что может быть причиной этого?

4b9b3361

Ответ 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, и он решил проблему.