在控制器测试中遇到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)没有什么区别。我们注意到puts会在响应上调用to_a
,它返回一个[@status, @header, self]
的数组,所以它会以某种方式导致这种奇怪的递归?
更新:这是gist代码+规范
答案 0 :(得分: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")