Pregunta

Lo siguiente funciona bien:

Then /^I should see a button called "([^\"]*)"$/ do |name|
  response.should have_selector("li") do |li|
    li.should have_selector("a") do |a|
      a.should contain(name)
    end
  end
end

Ahora necesito complementarlo con un paso como este:

Then /^I should not see a button called "([^\"]*)"$/ do |name|
   [snip...]
end

El estándar "Y no debería ver" no es satisfactorio, ya que recogerá la frase de destino en cualquier lugar de la página, no solo dentro de los botones. Necesito verificar específicamente que no haya ningún botón con el texto de destino.

Mi primer instinto fue intentar algo como esto:

Then /^I should see a button called "([^\"]*)"$/ do |name|
  response.should have_selector("li") do |li|
    li.should have_selector("a") do |a|
      a.should_not contain(name)
    end
  end
end

Pero, por supuesto, eso pasará siempre que haya algún botón en la página que no incluya el texto de destino, incluso si también hay uno o más botones que sí incluyen el texto de destino.

¿Tus pensamientos?

Muchas gracias,

Steven.

¿Fue útil?

Solución 2

¡Problema resuelto! Le di a cada control una clase de "control", luego escribí definición de este paso:

Then /^I should not see a control called "([^\"]*)"$/ do |name|
  response.should have_selector("a.control", :content => name, :count
=> 0)
end

Por supuesto, esto supone que estoy feliz de darles a todos una clase de " control " ...

s.

Otros consejos

Puede usar afirm_no_contener (y tal vez not_contain pero lo dudo ya que no está en rdoc ).

a.should assert_not_contain(name)

¿Sus botones son realmente enlaces? Para los botones (donde hay un valor de envío), uso:

assert_have_selector "input[type=submit][value=\"#{text}\"]"

y:

assert_have_no_selector "input[type=submit][value=\"#{text}\"]"

hth.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top