当我分别运行我的模型规格和控制器规格时,这是很好的。当我一起运行它们时,我得到一个堆栈溢出,字面意思是:)
$ bundle exec rspec --fail-fast spec/models
........
Finished in 0.44274 seconds
8 examples, 0 failures
$ bundle exec rspec --fail-fast spec/controllers
..
Finished in 0.99339 seconds
2 examples, 0 failures
$ bundle exec rspec --fail-fast spec
F
Failures:
1) HerpController derp derp example
Failure/Error: Unable to find matching line from backtrace
SystemStackError:
stack level too deep
# /Users/jared/.rvm/gems/ruby-1.9.2-p290/gems/actionpack-3.2.1/lib/abstract_controller/layouts.rb:359
Finished in 0.02241 seconds
1 example, 1 failure我怎么才能开始调试呢?谢谢。
发布于 2012-02-13 13:11:44
一次删除一半的规格就出现了这个问题。我想这是二等分调试的一个例子。感谢Frederick Thanks,他的评论建议了这种方法。
对于后代来说,这就是问题所在。
include Rails.application.routes.url_helpers
describe "Attendee#next_page" do
end显然,包括go inside describe
describe "Attendee#next_page" do
include Rails.application.routes.url_helpers
end关于rspec,我有很多东西要学习。:)
发布于 2012-02-12 15:40:18
您可以在代码中放置一条debugger语句并以这种方式进行调试,或者在您知道正在运行的代码所在的位置开始使用puts "got here"。我建议使用一些有意义的东西,而不是"got here“:-)
发布于 2012-02-12 18:30:36
我会从代码中关键点的puts或raise语句开始,这样您就可以开始缩小导致问题的行的范围。一旦你开始接近,你就可以一次注释掉一行,找出问题在哪一行消失了--一旦你把它压缩到一行,你就可以找出这行做了什么Ruby不喜欢的事情。
一般来说,“堆栈级别太深”通常是一个无限循环或无限递归问题--我可以想象,在某种情况下,模型正在调用调用模型的控制器,反之亦然。除非你开始注释掉几行代码,否则无法确定,但任何你拥有函数调用的地方都将属于你的可疑短名单。祝好运!
https://stackoverflow.com/questions/9247071
复制相似问题