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.
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.
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.
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.
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 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
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
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 ...
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