RSpec - Matchers
Si recuerda nuestro ejemplo original de Hello World, contenía una línea que se veía así:
expect(message).to eq "Hello World!"
La palabra clave eql es una RSpec"Comparador". Aquí, presentaremos los otros tipos de comparadores en RSpec.
Coincidentes de igualdad / identidad
Comparadores para probar la igualdad de objetos o valores.
Matcher | Descripción | Ejemplo |
---|---|---|
eq | Pasa cuando es real == esperado | esperar (real) .to eq esperado |
eql | Pasa cuando actual.eql? (Esperado) | esperar (real) .to eql esperado |
ser | Pasa cuando real.equal? (Esperado) | esperar (real). de esperar |
igual | También pasa cuando actual.equal? (Esperado) | esperar (real) .para igualar lo esperado |
Ejemplo
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
Cuando se ejecuta el código anterior, producirá la siguiente salida. La cantidad de segundos puede ser ligeramente diferente en su computadora:
.
Finished in 0.036 seconds (files took 0.11901 seconds to load)
1 example, 0 failures
Comparadores de comparación
Coincidentes para comparar con valores.
Matcher | Descripción | Ejemplo |
---|---|---|
> | Pasa cuando es real> esperado | esperar (real) .to ser> esperado |
> = | Pasa cuando es real> = esperado | esperar (real). ser> = esperado |
< | Pasa cuando real <esperado | esperar (real) .to ser <esperado |
<= | Pasa cuando real <= esperado | esperar (real) .to ser <= esperado |
be_between inclusive | Pasa cuando el valor real es <= mínimo y> = máximo | esperar (real) .to be_between (min, max) .inclusive |
be_between exclusivo | Pasa cuando el valor real es <min y> max | esperar (real) .to be_between (min, max) .exclusive |
partido | Pasa cuando real coincide con una expresión regular | esperar (real) .para coincidir (/ regex /) |
Ejemplo
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
Cuando se ejecuta el código anterior, producirá la siguiente salida. La cantidad de segundos puede ser ligeramente diferente en su computadora:
.
Finished in 0.013 seconds (files took 0.11801 seconds to load)
1 example, 0 failures
Coincidentes de clase / tipo
Matchers para probar el tipo o clase de objetos.
Matcher | Descripción | Ejemplo |
---|---|---|
be_instance_of | Pasa cuando actual es una instancia de la clase esperada. | esperar (real) .to ser_instancia_de (esperado) |
be_kind_of | Pasa cuando actual es una instancia de la clase esperada o cualquiera de sus clases principales. | esperar (real) .to be_kind_of (esperado) |
responder a | Pasa cuando real responde al método especificado. | esperar (real) .to responder_to (esperado) |
Ejemplo
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
Cuando se ejecuta el código anterior, producirá la siguiente salida. La cantidad de segundos puede ser ligeramente diferente en su computadora:
.
Finished in 0.002 seconds (files took 0.12201 seconds to load)
1 example, 0 failures
Coincidentes verdadero / falso / nulo
Coincidentes para probar si un valor es verdadero, falso o nulo.
Matcher | Descripción | Ejemplo |
---|---|---|
ser cierto | Pasa cuando real == verdadero | esperar (real) .para ser verdad |
ser falso | Pasa cuando es real == falso | esperar (real). ser falso |
be_truthy | Pasa cuando lo real no es falso o nulo | esperar (real). ser_verdad |
be_falsey | Pasa cuando lo real es falso o nulo | esperar (real) .to be_falsey |
be_nil | Pasa cuando el valor real es nulo | esperar (real). ser_nil |
Ejemplo
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
Cuando se ejecuta el código anterior, producirá la siguiente salida. La cantidad de segundos puede ser ligeramente diferente en su computadora:
.
Finished in 0.003 seconds (files took 0.12301 seconds to load)
1 example, 0 failures
Coincidentes de errores
Coincidentes para probar, cuando un bloque de código genera un error.
Matcher | Descripción | Ejemplo |
---|---|---|
raise_error (ErrorClass) | Pasa cuando el bloque genera un error de tipo ErrorClass. | esperar {block} .to raise_error (ErrorClass) |
raise_error ("mensaje de error") | Pasa cuando el bloque genera un error con el mensaje "mensaje de error". | esperar {bloque} .to raise_error ("mensaje de error") |
raise_error (ErrorClass, "mensaje de error") | Pasa cuando el bloque genera un error de tipo ErrorClass con el mensaje "mensaje de error" | esperar {bloque} .to raise_error (ErrorClass, "mensaje de error") |
Ejemplo
Guarde el siguiente código en un archivo con el nombre error_matcher_spec.rb y ejecútelo con este 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
Cuando se ejecuta el código anterior, producirá la siguiente salida. La cantidad de segundos puede ser ligeramente diferente en su computadora:
.
Finished in 0.002 seconds (files took 0.12101 seconds to load)
1 example, 0 failures