2011-12-02 22 views
0

我正在使用ruby-1.9.3-p0。我的軟件包包括添加額外示例後發生rspec中的堆棧級別過深錯誤

Using rails (3.1.3) 
Using rspec-core (2.7.1) 
Using rspec-expectations (2.7.0) 
Using rspec-mocks (2.7.0) 
Using rspec (2.7.0) 
Using rspec-rails (2.7.0) 

我在我的規範中出現了這個非常奇怪的問題。我有大約5例子,像這樣:

describe "Example" do 
    context "when adding stuff" do 
    it "should do stuff" do 
     # ... 
    end 

    it "..." do 
     # ... 
    end 
    end 

    context "when doing other stuff" do 
    it "..." do 
     # ... 
    end 

    it "..." do 
     # ... 
    end 

    it "..." do 
     # ... 
    end 
    end 
end 

不過,如果我添加一個額外的例子中,context "when doing other stuff"塊中,我得到這個錯誤

1) Example when adding stuff should do stuff 
    Failure/Error: Unable to find matching line from backtrace 
    stack level too deep 
    # /../../activesupport-3.1.3/lib/active_support/duration.rb:55 


    2) Example when adding stuff should do stuff 
    Failure/Error: Unable to find matching line from backtrace 
    stack level too deep 
    # /../../activesupport-3.1.3/lib/active_support/core_ext/time/calculations.rb:266 

是什麼讓這個奇怪的是,如果我註釋掉

it "should do stuff" do 
    # everything commented out 
end 

它仍然發生。即使我評論了我添加的新示例

it "new example within when doing stuff context" do 
    # everything commented out 
end 

它仍然會拋出錯誤。 然後,如果我註釋掉每個示例中的所有代碼,它仍然會發生!只有當我完全刪除第一個it "should do stuff"示例時,它纔會消失。有沒有人經歷過這個?謝謝。

編輯:我還想補充一件事。當運行如下所有規格:

rspec 

所有我的例子傳遞和運行沒有堆棧溢出occuring。然而,這只是如果我運行規範獨奏會出現這種情況:

rspec spec/models/example_spec.rb 
+3

聽起來就像你有一個方法調用自己的某個地方(調用自己,調用自己,調用自己...),或者是一個遞歸方法,它不會很快觸及其退出條件,導致堆棧溢出。查看最近添加的其他代碼,或者查看代碼調用的代碼,您可能會發現問題的根源。 – jefflunt

+0

但爲什麼只是簡單地添加一個額外的例子(甚至空白)導致堆棧溢出。爲什麼不在之前? – axsuul

+2

我不知道。你能發佈你的實際代碼而不是僞代碼嗎?不要成爲一個混蛋,但如果你給我們理論的代碼,我們只能給你理論上的答案,你知道嗎? – jefflunt

回答

0

同時一定要檢查你的模型最近的更改,如

after_save :do_something 

def do_something 
self.update_attribute(:att,val) 
end 

又名無限循環