2016-08-10 50 views
2

對於我的幾乎所有規格,當rspec報告錯誤時,它會通知我路徑末尾的行號,例如,rspec不報告行號錯誤

rspec ./spec/controllers/eclubs_controller_spec.rb:21 

然而,在我的規格之一,它報告的錯誤位置這樣

rspec ./spec/controllers/eclubs/members_controller_spec.rb[1:1:2:3:1] 

這可能是有意義的塊的嵌套的條件,但坦率地說是非常模糊的。

,工程規範的頂部看起來像這樣

require 'rails_helper' 
describe EclubsController do 

和不工作看起來像這樣

require 'rails_helper' 
describe Eclubs::MembersController do 

我可以在這兩個文件中看到的唯一的區別是一個一個控制器是命名空間的,但我有其他命名空間的控制器正確報告錯誤行。

這是什麼造成的?

+0

嗯,難以判斷。有時候會發生這種情況,因爲它是一個導致錯誤的包含文件...例如'rails_helper.rb'或fixtures文件中的語法錯誤。不一定是這裏的實際問題,但是這可能會導致此問題出現在 –

回答

3

當行號不足以識別相關示例時,RSpec使用示例ID。

就會發生這種情況時的例子是動態定義的,例如在一個循環:

(0..10).each do |i| 
    it do 
    expect(i).to_not eq(5) 
    end 
end 
# rspec './my_spec.rb[1:6]' 

,或者使用例如共享組時:

RSpec.shared_examples_for "not equal 5" do |i| 
    it do 
    expect(i).to_not eq(5) 
    end 
end 

RSpec.describe do 
    it_behaves_like "not equal 5", 5 
    it_behaves_like "not equal 5", 4 
end 
# rspec './my_spec.rb[2:1:1]' 
+0

點上。在那個文件中我有一個共享的示例組。 – Obromios

+0

好的,但有沒有辦法告訴rspec不要這樣做?特別是在實際上並不明確時(例如,當您使用參數化共享示例時,例如,每個上下文塊僅調用一次)。我不想在頭腦中解析一棵樹,我只想點擊iterm中的失敗規範並修復該死的代碼。 –