2016-08-10 8 views
2

Für fast alle meine Spezifikationen, wenn rspec einen Fehler meldet, informiert es mich über die Zeilennummer am Ende des Pfades, z.rspec meldet keine Zeilennummer des Fehlers

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

jedoch in einen meiner specs, meldet es den Fehler Ort wie diese

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

den Sinn in Bezug auf die Verschachtelung von Blöcken machen kann, ist aber ehrlich gesagt eher kryptisch.

Der obere Teil der Spezifikation, die

require 'rails_helper' 
describe EclubsController do 

und sieht aus wie das funktioniert, das sieht nicht

require 'rails_helper' 
describe Eclubs::MembersController do 

Der einzige Unterschied, den ich in den beiden Dateien sehen kann, ist wie diese Arbeit dieser eine Controller ist Namespaced, aber ich habe andere Namespace-Controller, die die Fehlerzeile korrekt melden.

Was verursacht das?

+0

Hmm, schwer zu sagen. Manchmal passiert dies, wenn es eine enthaltene Datei ist, die den Fehler verursacht ... zB ein Syntaxfehler in 'rails_helper.rb' oder der Datei fixtures. Nicht unbedingt das eigentliche Problem hier, aber das kann dazu führen, –

Antwort

3

RSpec verwendet die Beispiel-ID, wenn die Zeilennummer nicht eindeutig genug ist, um das betreffende Beispiel zu identifizieren.

Dies geschieht, wenn Beispiele dynamisch definiert werden, zum Beispiel in einer Schleife:

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

Oder wenn eine gemeinsame Beispiel Gruppe mit:

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

Spot on. In dieser Datei habe ich eine gemeinsame Beispielgruppe. – Obromios

+0

ok, aber gibt es eine Möglichkeit, rspec NICHT zu sagen, dies nicht zu tun? vor allem, wenn es nicht mehrdeutig ist (wenn Sie parametrisierte Beispiele verwenden, aber nur einmal pro Kontextblock aufrufen). Ich will keinen Baum in meinem Kopf analysieren, ich möchte nur auf die fehlerhafte Spezifikation in iterm klicken und den verdammten Code reparieren. –

Verwandte Themen