Pregunta

En rspec: ¿Puedo adjuntar un mensaje a una verificación de la misma forma que lo haría en los marcos de las pruebas de estilo xUnit? ¿Cómo?

assert_equal value1, value2, "something is wrong"
¿Fue útil?

Solución

should y should_not tomar un segundo argumento (message) que anula el mensaje predeterminado del emparejador.

1.should be(2), 'one is not two!'

Los mensajes predeterminados son aunque suele ser bastante útil.

actualización:

para RSpec 3:

expect(1).to eq(2), "one is not two!"

Otros consejos

En RSpec, es el trabajo de la matcher para imprimir un mensaje de fallo sensible. Los comparadores genéricos que se suministran con RSpec, obviamente, sólo puede imprimir mensajes de error no descripta genéricos, ya que no sabe nada acerca de su dominio particular. Es por eso que se recomienda que usted escribe sus propios comparadores específicos de dominio, lo que le dará dos pruebas más legibles y mensajes de error más legible.

Este es un ejemplo de la documentación de RSpec :

require 'rspec/expectations'

RSpec::Matchers.define :be_a_multiple_of do |expected|
  match do |actual|
    (actual % expected).zero?
  end
  failure_message_for_should do |actual|
    "expected that #{actual} would be a multiple of #{expected}"
  end
  failure_message_for_should_not do |actual|
    "expected that #{actual} would not be a multiple of #{expected}"
  end
  description do
    "be multiple of #{expected}"
  end
end

Nota: sólo se requiere match, los demás se generará automáticamente. Sin embargo, el punto central de su pregunta es, por supuesto, que lo hace no como los mensajes por defecto, por lo que necesita al menos también definir failure_message_for_should.

Además, puede definir match_for_should y match_for_should_not en lugar de match si necesita lógica diferente en el caso positivo y negativo.

Como muestra @ Chris Johnsen, también puede pasar explícitamente un mensaje a la expectativa. Sin embargo, se corre el riesgo de perder las ventajas de legibilidad.

Compare esto:

user.permissions.should be(42), 'user does not have administrative rights'

con esto:

user.should have_administrative_rights

Eso (más o menos) implementarse como esto:

require 'rspec/expectations'

RSpec::Matchers.define :have_administrative_rights do
  match do |thing|
    thing.permissions == 42
  end
  failure_message_for_should do |actual|
    'user does not have administrative rights'
  end
  failure_message_for_should_not do |actual|
    'user has administrative rights'
  end
end

En mi caso se trataba de un problema de los paréntesis:

        expect(coder.is_partial?(v)).to eq p, "expected #{v} for #{p}"

Esto resultó en un número incorrecto de argumentos, mientras que la forma correcta es:

        expect(coder.is_partial?(v)).to eq(p), "expected #{v} for #{p}"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top