23

我有一个使用固定装置的功能测试。我也在我的单元测试中使用了固定装置,但它们可以正常工作。运行功能测试时,我得到:

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 夹具。就像我说的,这些装置在单元测试中工作得很好。

知道可能是什么原因造成的吗?

4

3 回答 3

45

改变

setup do
  @response = responses(:one)
end

setup do
  @myresponse = responses(:one)
end

走吧!

问题在于第 386 行附近的“actionpack-3.0.1/lib/action_controller/test_case.rb”。

测试用例假定@response 持有“ActionDispatch::Response”。你覆盖它,它不再是“ActionDispatch::Response”并且测试用例失败了。

我不确定这是否是预期的行为。

无论如何,只要确保你没有覆盖 @response/@request/@controller/@routes 它应该可以工作。

于 2010-11-15T17:06:33.943 回答
2

Flo的回答大部分是正确的,但我只是想澄清一下:

在 Rails 3.0.x 中,@request 应该是一个ActionController::TestRequest类型,它recycle!上面定义了方法。有TestResponseTestRequestTestSession

您可能希望在某些情况下实际初始化或操作这些类型的对象。就我而言,我需要模拟具有特定域名的站点

@request = ActionController::TestRequest.new unless @request
@request.host = "www.hostname.com"
于 2011-08-25T22:48:26.517 回答
2

我只是在命名变量时遇到了类似的问题@request。我改成@_request,它解决了这个问题。

于 2014-05-13T15:46:22.560 回答