[英]rspec stack level too deep
當我單獨運行我的模型規格和控制器規格時,它很好。 當我一起運行它們時,我得到一個堆棧溢出,字面意思:)
$ 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
我怎么開始調試這個? 謝謝。
一次刪除一半我的規格出現了問題。 我想這是bisect調試的一個例子。 感謝Frederick Cheung,他的評論提出了這種方法。
對后人來說,這就是問題所在。
include Rails.application.routes.url_helpers
describe "Attendee#next_page" do
end
顯然,包括進入describe
describe "Attendee#next_page" do
include Rails.application.routes.url_helpers
end
我有很多關於rspec的知識。 :)
您可以在代碼中放置一個debugger
語句並以這種方式進行調試,或者只是在您知道正在運行的代碼的位置開始使用puts "got here"
。 我建議使用有意義的東西,而不是“到這里”:-)
可能你可以得到“無法找到來自backtrace的匹配行”錯誤,以防你檢查一些實際上沒有初始化的var
在此示例中,請注意未在錯誤的代碼段中初始化的var 觀察
錯誤的片段
describe "GET index" do
it "assigns all observations as @observations" do
get :index, {}, valid_session
assigns(:observations).should eq([observation])
end
end
固定的例子 (第3行)
describe "GET index" do
it "assigns all observations as @observations" do
observation = Observation.create! valid_attributes
get :index, {}, valid_session
assigns(:observations).should eq([observation])
end
end
有時我們依賴於使用let作為初始化程序,但忘記添加它,例如
let(:observation) {FactoryGirl.create(:observation)}
我會在代碼的關鍵點開始使用puts
或raise
語句,這樣你就可以開始縮小導致問題的那一行。 一旦你開始接近,你可以一次注釋掉一行來找出問題消失的那一行 - 一旦你把它歸結為一行,你就可以弄清楚那行是做什么的Ruby沒有不喜歡。
一般來說,從哪里開始,“堆棧級別太深”通常是無限循環或無限遞歸問題 - 我想象有一些模型正在調用調用模型的控制器,反之亦然。 在你開始評論線路之前無法確切知道,但任何有功能調用的地方都屬於你的可疑短名單。 祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.