2010-10-02 49 views
22

我有一個使用燈具的功能測試。我也在我的單元測試中使用燈具,但他們的工作沒有缺陷。當運行功能測試,我得到一個:在Rails 3中,我收到了一個N​​oMethodError的回收!方法測試

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

測試用例假設@應答持有 「ActionDispatch ::響應」。您覆蓋它,它不再是「ActionDispatch :: Response」,並且測試用例失敗。

我不確定這是否是有意的行爲。

無論如何,只要確保您不覆蓋@ response/@ request/@ controller/@ routes並且它應該可以工作。

+1

謝謝,只是保存了我的培根。與一個名爲@request的變量有類似的問題。 – 2011-07-25 21:31:15

+0

哇!與OP有完全相同的代碼,現在我的代碼與您的解決方案完全相同! @flo – Ben 2014-11-18 05:14:37

2

Flo的答案大多是正確的,但我只是想澄清:

在Rails 3.0.x的是@request有望成爲一個ActionController::TestRequest型,其上定義的recycle!方法。有TestResponse,TestRequestTestSession

您可能想要在某些情況下實際初始化或操作這些類型的對象。就我而言,我需要用

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

我只遇到過類似問題的命名變量@request嘲笑具有特定域名的網站。 我更改爲@_request並解決了問題。

+0

謝謝。 '@ response'也是如此。 – scarver2 2015-04-26 21:19:46

相關問題