4

コントローラテストでrspecとrailsに奇妙な問題があります。puts responseスペック内に追加するたびに、これらの多くが出力されます

200
{"Content-Type"=>"text/html; charset=utf-8"}
200
{"Content-Type"=>"text/html; charset=utf-8"}
200
{"Content-Type"=>"text/html; charset=utf-8"}
200
{"Content-Type"=>"text/html; charset=utf-8"}

その後、で失敗しSystemStackError: stack level too deepます。pryを介して応答を検査することはうまく機能し、他のものを印刷することもうまく機能します。

最新のrspec(2.11)にアップグレードしても違いはありません。to_aputsが応答の呼び出しを呼び出し、の配列を返すことに気づきました[@status, @header, self]。それで、どういうわけか、この奇妙な再帰が発生しますか?

更新:ここにコードと仕様の要点があります

4

1 に答える 1

5

ラックのバグに遭遇したと思います。 [rack_response].flatten無限ループに入ります。詳細については、次の問題を参照してください。

解決策は、応答オブジェクト自体に期待値を設定せず、代わりに、ステータス、ヘッダー、または本文に個別に期待値を設定することです。例:

last_response.status.should eq(200)
last_response.body.should include("some text")
last_response.headers.should include("Content-Type" => "text/plain")
于 2012-09-18T16:20:27.987 に答える