2016-09-15 4 views
0

Unsere Testsuite hat ein Problem.RSpec-Datensatz, der scheinbar erstellt wurde (: suite) Wie kann ich diesen Datensatz nachverfolgen?

Immer wenn die ganze Suite gestartet wird, wird ein streunender Datensatz erstellt.

Immer wenn ich eine einzelne Datei oder einen Kontext mit Spezifikationen ausführe, wird dieser Datensatz nicht erstellt.

Ich schrieb in spec_helper.rb und egal in welcher Reihenfolge die Tests liefen, dieser Datensatz besteht irgendwie weiter. Scheinbar bevor die Beispiele überhaupt angefangen haben.

Wir seed unsere Datenbank, also versuchte ich eine saubere Einrichtung. Dann

RAILS_ENV=test rake db:setup 
RAILS_ENV=test rake db:seed 
echo "Model.count" | rails c test 
=> 0 

, wenn ich alle Tests laufen (markiert den Auftrag und überprüft before(:all)).

rspec 
COUNT = 1 
. 
COUNT = 1 
. 
COUNT = 1 
. 
etc 

Ich habe sorgfältig geprüft spec_helper.rb (RSpec2, pre rails_helper.rb) und aus ohne Glück jede Unterstützung Datei kommentiert.

Ich vermute die Code-Basis an diesem Punkt, vielleicht einige seltsame Anruf an etwas, wo jemand eine find_or_create, einen seltsamen Rückruf oder etwas zurückgelassen hat, habe ich keine Ahnung.

Was würde ich gerne wissen, ist:

  • Wie kann ich tackle brechen die Suiten unten beim Start?
  • Kann ich ein Backtrace meiner Testsuite starten?
  • Wer ist erfolgreich diese Art von persistenten Datensatz in RSpec gejagt?

EDIT

Ich habe config.before(:suite) { debugger } und der Datensatz noch bevor diese erstellt wird!

Wie kann ich diesen Code noch weiter aufschlüsseln?

[23, 32] in /Users/yourname/.rvm/gems/[email protected]/gems/rspec-core-2.14.6/lib/rspec/core/command_line.rb 
    23   @world.announce_filters 
    24 
    25   @configuration.reporter.report(@world.example_count, @configuration.randomize? ? @configuration.seed : nil) do |reporter| 
    26   begin 
    27    @configuration.run_hook(:before, :suite) 
=> 28    @world.example_groups.ordered.map {|g| g.run(reporter)}.all? ? 0 : @configuration.failure_exit_code 
    29   ensure 
    30    @configuration.run_hook(:after, :suite) 
    31   end 
    32   end 
(rdb:1) ModelName.count 
1 

Antwort

2

Für die Aufzeichnung von, wie ich den persistenten Datensatz gefunden:

von before(:suite) { debugger } verwenden, entfernte ich die Aufzeichnung und lief die gesamte Testsuite und bemerken ein Test versagt wurde.

In diesem Test war etwas ähnlich der folgenden:

context "blah" do 
    model = FactoryGirl.create(:model) 
end 

Ich habe einfach den Code innerhalb eines before(:each) Block, und der Test wurde vorbei und jetzt Mine so waren.

TIL: Immer wenn RSpec die Suite lädt, wertet es den gesamten Code aus, der sich nicht in einer Transaktion befindet. Deshalb konnte ich nicht versuchen, eine problematische Datei zu lokalisieren, indem ich mir ansehe, wann der Datensatz erstellt wurde.

Verwandte Themen