RSpec - Matcher
Wenn Sie sich an unser ursprüngliches Hello World-Beispiel erinnern, enthielt es eine Zeile, die so aussah:
expect(message).to eq "Hello World!"
Das Schlüsselwort eql ist ein RSpec"Matcher". Hier werden wir die anderen Arten von Matchern in RSpec vorstellen.
Gleichstellungs- / Identitäts-Matcher
Matcher zum Testen der Objekt- oder Wertgleichheit.
Matcher | Beschreibung | Beispiel |
---|---|---|
Gl | Besteht, wenn tatsächlich == erwartet | erwarten (tatsächlich) .zu Gl. erwartet |
Gl | Besteht, wenn actual.eql? (Erwartet) | erwarten (tatsächlich) .zu erwarten |
Sein | Besteht, wenn actual.equal? (Erwartet) | erwarten (tatsächlich). zu erwarten |
gleich | Passiert auch wenn actual.equal? (Erwartet) | erwarten (tatsächlich) .zu gleich erwartet |
Beispiel
describe "An example of the equality Matchers" do
it "should show how the equality Matchers work" do
a = "test string"
b = a
# The following Expectations will all pass
expect(a).to eq "test string"
expect(a).to eql "test string"
expect(a).to be b
expect(a).to equal b
end
end
Wenn der obige Code ausgeführt wird, wird die folgende Ausgabe erzeugt. Die Anzahl der Sekunden kann auf Ihrem Computer leicht abweichen -
.
Finished in 0.036 seconds (files took 0.11901 seconds to load)
1 example, 0 failures
Vergleich Matchers
Matcher zum Vergleichen mit Werten.
Matcher | Beschreibung | Beispiel |
---|---|---|
> | Besteht, wenn tatsächlich> erwartet | erwarten (tatsächlich) .zu erwarten sein |
> = | Besteht, wenn tatsächlich> = erwartet | erwarten (tatsächlich) .zu sein> = erwartet |
< | Besteht, wenn tatsächlich <erwartet | erwarten (tatsächlich) .zu sein <erwartet |
<= | Besteht, wenn tatsächlich <= erwartet | erwarten (tatsächlich) .zu sein <= erwartet |
be_between inklusive | Besteht, wenn der tatsächliche Wert <= min und> = max ist | Erwarten Sie (tatsächlich), dass zwischen (min, max) .inclusive |
be_between exklusiv | Besteht, wenn der tatsächliche Wert <min und> max ist | Erwarten Sie (tatsächlich), dass Sie zwischen (min, max) .exclusive liegen |
Spiel | Besteht, wenn Ist mit einem regulären Ausdruck übereinstimmt | Erwarten Sie (tatsächlich) .zu übereinstimmen (/ regex /) |
Beispiel
describe "An example of the comparison Matchers" do
it "should show how the comparison Matchers work" do
a = 1
b = 2
c = 3
d = 'test string'
# The following Expectations will all pass
expect(b).to be > a
expect(a).to be >= a
expect(a).to be < b
expect(b).to be <= b
expect(c).to be_between(1,3).inclusive
expect(b).to be_between(1,3).exclusive
expect(d).to match /TEST/i
end
end
Wenn der obige Code ausgeführt wird, wird die folgende Ausgabe erzeugt. Die Anzahl der Sekunden kann auf Ihrem Computer leicht abweichen -
.
Finished in 0.013 seconds (files took 0.11801 seconds to load)
1 example, 0 failures
Klassen- / Typ-Matcher
Matcher zum Testen des Objekttyps oder der Objektklasse.
Matcher | Beschreibung | Beispiel |
---|---|---|
be_instance_of | Besteht, wenn Ist eine Instanz der erwarteten Klasse ist. | erwarten (tatsächlich) .zu_Instanz_von (erwartet) |
be_kind_of | Besteht, wenn Ist eine Instanz der erwarteten Klasse oder einer ihrer übergeordneten Klassen ist. | erwarten (tatsächlich) .zu_kind_of (erwartet) |
Antworten auf | Besteht, wenn tatsächlich auf die angegebene Methode reagiert. | erwarten (tatsächlich) .zu antworten_zu (erwartet) |
Beispiel
describe "An example of the type/class Matchers" do
it "should show how the type/class Matchers work" do
x = 1
y = 3.14
z = 'test string'
# The following Expectations will all pass
expect(x).to be_instance_of Fixnum
expect(y).to be_kind_of Numeric
expect(z).to respond_to(:length)
end
end
Wenn der obige Code ausgeführt wird, wird die folgende Ausgabe erzeugt. Die Anzahl der Sekunden kann auf Ihrem Computer leicht abweichen -
.
Finished in 0.002 seconds (files took 0.12201 seconds to load)
1 example, 0 failures
Richtig / Falsch / Null-Matcher
Matcher zum Testen, ob ein Wert wahr, falsch oder null ist.
Matcher | Beschreibung | Beispiel |
---|---|---|
wahr sein | Besteht, wenn aktuell == wahr | erwarte (tatsächlich), um wahr zu sein |
sei falsch | Besteht, wenn aktuell == falsch | erwarten (tatsächlich). falsch sein |
be_truthy | Besteht, wenn Ist nicht falsch oder gleich Null ist | erwarte (tatsächlich) .zu_wahrheit |
be_falsey | Besteht, wenn Ist falsch oder Null ist | erwarte (tatsächlich) .zu_falsey |
be_nil | Besteht, wenn tatsächlich Null ist | erwarte (tatsächlich) .to be_nil |
Beispiel
describe "An example of the true/false/nil Matchers" do
it "should show how the true/false/nil Matchers work" do
x = true
y = false
z = nil
a = "test string"
# The following Expectations will all pass
expect(x).to be true
expect(y).to be false
expect(a).to be_truthy
expect(z).to be_falsey
expect(z).to be_nil
end
end
Wenn der obige Code ausgeführt wird, wird die folgende Ausgabe erzeugt. Die Anzahl der Sekunden kann auf Ihrem Computer leicht abweichen -
.
Finished in 0.003 seconds (files took 0.12301 seconds to load)
1 example, 0 failures
Fehler-Matcher
Matcher zum Testen, wenn ein Codeblock einen Fehler auslöst.
Matcher | Beschreibung | Beispiel |
---|---|---|
raise_error (ErrorClass) | Besteht, wenn der Block einen Fehler vom Typ ErrorClass auslöst. | Erwarten Sie, dass {block} .to einen Fehler behebt (ErrorClass) |
raise_error ("Fehlermeldung") | Besteht, wenn der Block einen Fehler mit der Meldung "Fehlermeldung" auslöst. | Erwarten Sie, dass {block} .to_error auslöst ("Fehlermeldung") |
raise_error (ErrorClass, "Fehlermeldung") | Besteht, wenn der Block einen Fehler vom Typ ErrorClass mit der Meldung "error message" auslöst. | Erwarten Sie, dass {block} .to_error erhöht (ErrorClass, "error message") |
Beispiel
Speichern Sie den folgenden Code in einer Datei mit dem Namen error_matcher_spec.rb und führen Sie es mit diesem Befehl aus - rspec error_matcher_spec.rb.
describe "An example of the error Matchers" do
it "should show how the error Matchers work" do
# The following Expectations will all pass
expect { 1/0 }.to raise_error(ZeroDivisionError)
expect { 1/0 }.to raise_error("divided by 0")
expect { 1/0 }.to raise_error("divided by 0", ZeroDivisionError)
end
end
Wenn der obige Code ausgeführt wird, wird die folgende Ausgabe erzeugt. Die Anzahl der Sekunden kann auf Ihrem Computer leicht abweichen -
.
Finished in 0.002 seconds (files took 0.12101 seconds to load)
1 example, 0 failures