RSpec - Matchers
Se ricordi il nostro esempio originale Hello World, conteneva una riga simile a questa:
expect(message).to eq "Hello World!"
La parola chiave eql è un file RSpec"Matcher". Qui introdurremo gli altri tipi di matcher in RSpec.
Corrispondenze di uguaglianza / identità
Matcher per testare l'uguaglianza di oggetti o valori.
Matcher | Descrizione | Esempio |
---|---|---|
eq | Passa quando effettivo == previsto | aspettarsi (effettivo) .to eq atteso |
eql | Passa quando actual.eql? (Previsto) | aspettarsi (effettivo) .to eql previsto |
essere | Passa quando effettivo.uguale? (Previsto) | aspettarsi (effettivo). essere previsto |
pari | Passa anche quando effettivo. uguale? (Previsto) | aspettarsi (effettivo) .per eguagliare il previsto |
Esempio
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
Quando il codice precedente viene eseguito, produrrà il seguente output. Il numero di secondi potrebbe essere leggermente diverso sul tuo computer -
.
Finished in 0.036 seconds (files took 0.11901 seconds to load)
1 example, 0 failures
Matcher di confronto
Matcher per il confronto con i valori.
Matcher | Descrizione | Esempio |
---|---|---|
> | Passa quando effettivo> previsto | aspettarsi (effettivo) .per essere> previsto |
> = | Passa quando effettivo> = previsto | aspettarsi che (effettivo) sia> = previsto |
< | Passa quando effettivo <previsto | aspettarsi che (effettivo) sia <previsto |
<= | Passa quando effettivo <= previsto | aspettarsi che (effettivo) sia <= previsto |
essere_tra compreso | Passa quando effettivo è <= min e> = max | aspettarsi che (effettivo) sia_between (min, max) .inclusive |
be_between esclusivo | Passa quando il valore effettivo è <min e> max | aspettarsi che (effettivo) sia_between (min, max) .exclusive |
incontro | Passa quando actual corrisponde a un'espressione regolare | aspettati che (effettivo) corrisponda a (/ regex /) |
Esempio
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
Quando il codice precedente viene eseguito, produrrà il seguente output. Il numero di secondi potrebbe essere leggermente diverso sul tuo computer -
.
Finished in 0.013 seconds (files took 0.11801 seconds to load)
1 example, 0 failures
Corrisponditori di classe / tipo
Matcher per testare il tipo o la classe degli oggetti.
Matcher | Descrizione | Esempio |
---|---|---|
be_instance_of | Passa quando actual è un'istanza della classe prevista. | aspettarsi (effettivo) .essere_istanza_di (atteso) |
be_kind_of | Passa quando actual è un'istanza della classe prevista o di una delle sue classi padre. | aspettati (effettivo) .to be_kind_of (Previsto) |
rispondere a | Passa quando effettivo risponde al metodo specificato. | aspettarsi (effettivo) .per rispondere_to (atteso) |
Esempio
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
Quando il codice precedente viene eseguito, produrrà il seguente output. Il numero di secondi potrebbe essere leggermente diverso sul tuo computer -
.
Finished in 0.002 seconds (files took 0.12201 seconds to load)
1 example, 0 failures
Corrispondenze vero / falso / zero
Matcher per verificare se un valore è vero, falso o nullo.
Matcher | Descrizione | Esempio |
---|---|---|
essere vero | Passa quando effettivo == vero | aspettarsi che (effettivo) sia vero |
essere falso | Passa quando effettivo == falso | aspettarsi che (effettivo). sia falso |
be_truthy | Passa quando il valore effettivo non è falso o nullo | aspettarsi (effettivo) .essere_truthy |
be_falsey | Passa quando il valore effettivo è falso o nullo | aspettarsi (effettivo) .to be_falsey |
be_nil | Passa quando l'attuale è nullo | aspettarsi (effettivo) .to be_nil |
Esempio
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
Quando il codice precedente viene eseguito, produrrà il seguente output. Il numero di secondi potrebbe essere leggermente diverso sul tuo computer -
.
Finished in 0.003 seconds (files took 0.12301 seconds to load)
1 example, 0 failures
Correttori di errore
Matcher per il test, quando un blocco di codice genera un errore.
Matcher | Descrizione | Esempio |
---|---|---|
raise_error (ErrorClass) | Passa quando il blocco genera un errore di tipo ErrorClass. | aspettati {block} .to raise_error (ErrorClass) |
raise_error ("messaggio di errore") | Passa quando il blocco genera un errore con il messaggio "messaggio di errore". | aspettati {block} .to raise_error ("messaggio di errore") |
raise_error (ErrorClass, "messaggio di errore") | Passa quando il blocco genera un errore di tipo ErrorClass con il messaggio "messaggio di errore" | aspettati {block} .to raise_error (ErrorClass, "messaggio di errore") |
Esempio
Salva il codice seguente in un file con il nome error_matcher_spec.rb ed eseguilo con questo comando - 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
Quando il codice precedente viene eseguito, produrrà il seguente output. Il numero di secondi potrebbe essere leggermente diverso sul tuo computer -
.
Finished in 0.002 seconds (files took 0.12101 seconds to load)
1 example, 0 failures