Respuestas:
expect { some_method }.to raise_error
Sintaxis de RSpec 1:
lambda { some_method }.should raise_error
Consulte la documentación (para la sintaxis de RSpec 1) y la documentación de RSpec 2 para obtener más información.
expect { some_method }.to raise_error
expect { some_method }.to raise_error(SomeError)
expect { some_method }.to raise_error("oops")
expect { some_method }.to raise_error(/oops/)
expect { some_method }.to raise_error(SomeError, "oops")
expect { some_method }.to raise_error(SomeError, /oops/)
expect { some_method }.to raise_error(...){|e| expect(e.data).to eq "oops" }
# Rspec also offers to_not:
expect { some_method }.to_not raise_error
...
Nota: raise_error
y raise_exception
son intercambiables.
lambda { some_method }.should raise_error
lambda { some_method }.should raise_error(SomeError)
lambda { some_method }.should raise_error(SomeError, "oops")
lambda { some_method }.should raise_error(SomeError, /oops/)
lambda { some_method }.should raise_error(...){|e| e.data.should == "oops" }
# Rspec also offers should_not:
lambda { some_method }.should_not raise_error
...
Nota: raise_error
es un alias para raise_exception
.
RSpec 2:
RSpec 1:
En lugar de lambda, use esperar para:
expect { some_method }.to raise_error
Esto se aplica a las versiones más recientes de rspec, es decir, rspec 2.0 y versiones posteriores.
Ver el doco para más.
expect
es mejor o peor que lambda
.
expect { visit welcome_path }.to raise_error
A partir de la versión 3.3 en rspec-expections
gem, se genera una advertencia para un raise_error en blanco sin un parámetro
expect { raise StandardError }.to raise_error # results in warning
expect { raise StandardError }.to raise_error(StandardError) # fine
Esto le da una pista de que su código puede fallar con un error diferente al de la prueba que se pretende verificar.
ADVERTENCIA: El uso
raise_error
de coincidencias sin proporcionar un mensaje de error o riesgos específicos de los falsos positivos, ya queraise_error
coincidirá cuando Rubí plantea unaNoMethodError
,NameError
oArgumentError
, lo que permitiría la expectativa de pasar sin ni siquiera ejecutar el método se viene a llamar. En su lugar, considere proporcionar una clase o mensaje de error específico. Este mensaje puede ser suprimida por el ajuste:RSpec::Expectations.configuration.warn_about_potential_false_positives = false
.