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!、、、がTestResponseありTestRequestますTestSession

特定の状況では、これらのタイプのオブジェクトを実際に初期化または操作したい場合があります。私の場合、特定のドメイン名を持つサイトをモックする必要がありました

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

variable の名前付けで同様の問題が発生しました@request。に変更し@_request、問題を解決しました。

于 2014-05-13T15:46:22.560 に答える