2011-09-29 6 views
5

estoy escribiendo una prueba de controlador para una aplicación utilizando los carriles 3.1 testunit 2.4.0.ArgumentError: mensaje de afirmación debe ser de cadena o Proc usando assert_select

Quiero afirmar que una determinada partida o no aparece en la página.

estoy usando assert_select así:

assert_select 'h1', {:text => /Key Dates/, :count => 0} 

y conseguir el error siguiente:

ArgumentError: assertion message must be String or Proc: <</Key Dates/> 
expected but was <"Planner Maternity leave">.>(<Test::Unit::Assertions::AssertionMessage>) 

He rastreado esto al hecho de que las llamadas assert_selectbuild_message que crea una instancia de AssertionMessage y lo pasa a la unidad de prueba assert. Sin embargo, en la versión 2.2 de testunit (febrero de 2011) se agregaron comprobaciones que verifican el tipo de mensaje pasado. Estas comprobaciones activan el ArgumentError que se muestra arriba.

no estoy seguro de si el error está con la prueba de unidad de ser excesivamente estricta o assert_select pasando el tipo de objeto equivocado.

le puede aconsejar la mejor manera de seguir esto? ¿Alguna solución temporal?

+0

es el problema que el valor en ': text' se supone que es una cadena, y no un patrón? – jefflunt

+0

Hola, no, es bastante aceptable para: texto para ser un Regexp – heathd

Respuesta

0

Así, el assert_select documentation muestra el siguiente ejemplo, que pasa a un bloque en:

assert_select "ol" do |elements| 
    elements.each do |element| 
    assert_select element, "li", 4 
    end 
end 

Entonces, ¿qué si lo hizo algo así como ...

assert_select 'h1' do |elements| 
    elements.length == 0 ? fail 
    elements.each do |element| 
    element.text ~= /Key Dates/ ? fail 
    end 
end 

que no logra, básicamente, si encuentra el patrón O si el número de elementos h1 es cero. Obviamente, cambiarías las condiciones para que coincida con lo que intentas probar, pero ¿eso te acerca más a lo que necesitas?

0

Si no se puede actualizar a una versión libre de errores, que sólo puede pasar un tercer argumento (el mensaje), por lo que no fuerza el mensaje se construirá:

assert_select 'h1', {:text => /Key Dates/, :count => 0}, "Unexpected Key Dates found."

Cuestiones relacionadas