[RUBY] So validieren Sie nachfolgende Tests, auch wenn der Test fehlschlägt

Einführung

Gelegentlich möchten Sie möglicherweise mehrere "Beispiele" in ein "es" einfügen. Wenn Sie einfach mehrere Beispiele hinzufügen, fließt der nachfolgende Test nicht, wenn der Test fehlschlägt, und ** Beheben Sie den fehlgeschlagenen Test → Fehlschlagen des nachfolgenden Tests → Beheben des fehlgeschlagenen Tests ** Wiederholen Es ist mühsam. In einem solchen Fall können Sie es lösen, indem Sie "aggregierte_Fehler" angeben.

Was ist aggregate_failures?

In der offiziellen Dokumentation (https://relishapp.com/rspec/rspec-expectations/docs/aggregating-failures) wird dies erläutert.

RSpec::Expectations provides aggregate_failures, an API that allows you to group a set of expectations and see all the failures at once, rather than it aborting on the first failure.

Mit anderen Worten, Sie können "aggregierte_Fehler" angeben, um nachfolgende Tests zu validieren, selbst wenn der Test fehlschlägt. Ich denke, es ist schneller, das Verhalten tatsächlich zu sehen, deshalb würde ich es gerne sofort ausprobieren.

Wenn Sie keine aggregierten Fehler verwenden

Lassen Sie uns mit dem folgenden Code überprüfen.

require 'spec_helper'

RSpec.describe 'hoge spec' do
  it 'Ein Trottel sein' do
    expect(1).to eq(2)
    expect(1).to eq(3)
  end
end

Als ich den Test durchführte, war das Ergebnis wie folgt.

hoge spec
Ein Trottel sein(FAILED - 1)

Failures:

  1)hoge spec, um hoge zu werden
     Failure/Error: expect(1).to eq(2)

       expected: 2
            got: 1

       (compared using ==)
     # ./spec/hoge_spec.rb:5:in `block (2 levels) in <top (required)>'

Top 1 slowest examples (0.0273 seconds, 89.2% of total time):
hoge spec, um hoge zu werden
    0.0273 seconds ./spec/hoge_spec.rb:4

Finished in 0.0306 seconds (files took 0.23906 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/hoge_spec.rb:4 #hoge spec, um hoge zu werden

Wenn wir uns die Ergebnisse ansehen, können wir sehen, dass nach dem Fehlschlagen der ersten "Erwartung" die zweite "Erwartung" nicht validiert wurde.

Bei Verwendung von aggregat_failures

Geben Sie als Nächstes aggregate_failures wie unten gezeigt an und führen Sie es aus.

require 'spec_helper'

RSpec.describe 'hoge spec' do
  it 'Ein Trottel sein' do
    aggregate_failures do
      expect(1).to eq(2)
      expect(1).to eq(3)
    end
  end
end

Das Ergebnis sieht so aus.

hoge spec
Ein Trottel sein(FAILED - 1)

Failures:

  1)hoge spec, um hoge zu werden
     Got 2 failures from failure aggregation block.
     # ./spec/hoge_spec.rb:5:in `block (2 levels) in <top (required)>'

     1.1) Failure/Error: expect(1).to eq(2)

            expected: 2
                 got: 1

            (compared using ==)
          # ./spec/hoge_spec.rb:6:in `block (3 levels) in <top (required)>'

     1.2) Failure/Error: expect(1).to eq(3)

            expected: 3
                 got: 1

            (compared using ==)
          # ./spec/hoge_spec.rb:7:in `block (3 levels) in <top (required)>'

Top 1 slowest examples (0.0255 seconds, 90.1% of total time):
hoge spec, um hoge zu werden
    0.0255 seconds ./spec/hoge_spec.rb:4

Finished in 0.0283 seconds (files took 0.23094 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/hoge_spec.rb:4 #hoge spec, um hoge zu werden

Anscheinend schlägt die erste "Erwartung" genauso fehl, aber die zweite "Erwartung" scheint ebenfalls verifiziert worden zu sein.

So geben Sie aggregierte Fehler an

Inzwischen wissen wir, dass die Angabe von "aggregat_failures" nachfolgende Tests auch dann validiert, wenn der Test fehlschlägt. Es gibt verschiedene Möglichkeiten, aggregat_failures anzugeben. Von hier aus werden wir uns ansehen, wie die einzelnen angegeben werden.

Wie in Blöcken angeben

Wie bereits erwähnt, handelt es sich um eine Blockspezifikation.

require 'spec_helper'

RSpec.describe 'hoge spec' do
  it 'Ein Trottel sein' do
    aggregate_failures do
      expect(1).to eq(2)
      expect(1).to eq(3)
    end
  end
end

So geben Sie als Metainformationen an

Im Folgenden wird beschrieben, wie Sie es als Metainformation von "it" angeben.

require 'spec_helper'

RSpec.describe 'hoge spec' do
  it 'Ein Trottel sein', :aggregate_failures do
    expect(1).to eq(2)
    expect(1).to eq(3)
  end
end

Schlechtes Muster

Versuchen Sie, "aggregierte_Fehler" als erstes Argument anzugeben, wie unten gezeigt.

require 'spec_helper'

RSpec.describe 'hoge spec' do
  it :aggregate_failures do
    expect(1).to eq(2)
    expect(1).to eq(3)
  end
end

Klicken Sie hier für die Ergebnisse.

hoge spec
  aggregate_failures (FAILED - 1)

Failures:

  1) hoge spec aggregate_failures
     Failure/Error: expect(1).to eq(2)

       expected: 2
            got: 1

       (compared using ==)
     # ./spec/hoge_spec.rb:5:in `block (2 levels) in <top (required)>'

Top 1 slowest examples (0.02586 seconds, 89.1% of total time):
  hoge spec aggregate_failures
    0.02586 seconds ./spec/hoge_spec.rb:4

Finished in 0.02902 seconds (files took 0.23787 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/hoge_spec.rb:4 # hoge spec aggregate_failures

Wie Sie dem Ergebnis entnehmen können, fließt die nachfolgende Verarbeitung nicht, wenn Sie es mit dem ersten Argument angeben, sodass das erwartete Verhalten nicht erreicht wird. Selbst wenn es fehlschlägt, denke ich nicht, dass ich überprüfen werde, ob die nachfolgende Verarbeitung abläuft, daher ist dies schwer zu bemerken ...

abschließend

Wir haben das Verhalten von aggregat_failures und einige Möglichkeiten zur Angabe gesehen. Persönlich denke ich, dass es in Ordnung ist, weil die Methode der Angabe mit Blöcken süchtig zu machen scheint. Wenn Sie mehrere "Beispiele" einschließen möchten, geben Sie "aggregierte_Fehler" an.

Recommended Posts

So validieren Sie nachfolgende Tests, auch wenn der Test fehlschlägt
Gibt es eine Instanz, auch wenn der Konstruktor ausfällt?
Wie man einige Methoden der zu testenden Klasse verspottet
Verwendung der link_to-Methode
Verwendung der include? -Methode
So führen Sie einen Komponententest für Spring AOP durch
Verwendung der Methode form_with
So finden Sie den durchschnittlichen Winkel
Verwendung der Wrapper-Klasse
So fügen Sie die Löschfunktion hinzu
[Java] Verwendung der File-Klasse
So löschen Sie die Fehlerbündelung
[Schienen] Verwendung der Kartenmethode
Studieren der Verwendung des Konstruktors (Java)
[Verarbeitung × Java] Verwendung der Schleife
So bestimmen Sie die Anzahl der Parallelen
[Java] So stellen Sie die Datums- und Uhrzeit auf 00:00:00 ein
[Java] So erhalten Sie das aktuelle Verzeichnis
[Verarbeitung × Java] Verwendung der Klasse
So sortieren Sie eine Liste von SelectItems
Ich war süchtig nach dem Spring-Batch-Test
Wie man die Zehner und Einsen findet
So übergeben Sie den Wert an einen anderen Bildschirm
So erhalten Sie das Datum mit Java
[Verarbeitung × Java] Verwendung der Funktion
So testen Sie den privaten Bereich mit JUnit
[Java] Verwendung der Calendar-Klasse
Zusammengefasst, wie man die Programmiertreppe hinaufsteigt
[SpringBoot] So schreiben Sie einen Controller-Test
Wenn Sie die Testabdeckung privater Methoden in JUnit erfüllen möchten
So beheben Sie Fehler, die beim Integrationstest "Ruby on Rails" auftreten