2010-10-02 1 views
22

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

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

ответ

44

Изменить

setup do 
    @response = responses(:one) 
end 

в

setup do 
    @myresponse = responses(:one) 
end 

и вперед!

Проблема заключается в "actionpack-3.0.1/Lib/action_controller/test_case.rb" вокруг линии 386.

TestCase предполагает, что @response держит "ActionDispatch :: Response". Вы перезаписываете его, это больше не «ActionDispatch :: Response», а тестовый тест терпит неудачу.

Я не уверен, что это предполагаемое поведение.

В любом случае, просто убедитесь, что вы не перезаписываете @ response/@ request/@ controller/@ routes, и он должен работать.

+1

Спасибо, только что спас мой бекон. Имел аналогичную проблему с переменной, называемой @request. –

+0

Ничего себе! Имел точно такой же код, что и OP, и теперь у меня есть тот же код, что и ваше решение! @flo – Ben

2

ответ Фло в основном правильно, но я просто хотел уточнить:

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

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

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

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

+0

Спасибо. То же самое относится к '@ response'. – scarver2

Смежные вопросы