2012-02-02 6 views
7

Soy nuevo en las pruebas, así que tengan paciencia conmigo :)Carpincho/RSpec - Pruebas para múltiples posibles resultados con have_content

me gustaría ensayar el contenido de azar en una página. Por ejemplo, probemos la página para mostrar el contenido ya sea 'foo' o 'bar'.

Algo como lo de abajo es lo que estoy tratando de lograr

page.should (have_content('foo') || have_content('bar')) 

¿Alguna idea?

+0

En mi humilde opinión el título de tu pregunta es un poco engañoso. No tiene nada que ver con las estadísticas. ¿Derecha? Llámelo "prueba de condiciones complejas" o lo que sea (soy malo en hacer títulos). Piensa en otras personas que buscan una respuesta a tu pregunta. –

+0

De acuerdo. Espero que el nuevo título sea suficiente. – Viet

Respuesta

9

No conozco ninguna lista para usar Mather para usted. Pero puedes hornear los tuyos.

usando satisfy:

page.should satisfy {|page| page.has_content?('foo') or page.has_content?('bar')}

o simple_matcher

def have_foo_or_bar 
    simple_matcher("check content has foo or bar") { |page| page.has_content?('foo') or page.has_content?('bar') } 
end 

describe page 
    it "should have foo or bar" do 
    page.should have_foo_or_bar 
    end 
end 

Editar:has_content acepta expresiones regulares, por lo que puede comprobar si hay page.should have_content(/foo|bar/)

+0

Usando la satisfacción trabajado. No se pudo hacer que simple_matcher funcione porque estaba escupiendo NoMethodErrors. Según entiendo, ¿el método ha quedado obsoleto? Hubiera preferido usar simple_matcher para el mensaje de error personalizado. De todos modos, gracias por la ayuda! – Viet

+1

Derecha, los enlaces que te di son bastante obsoletos. Lo siento :(No sé por qué Google lo muestra en la parte superior, debería estar actualizándolo :) La versión actual es 2.8 [Expectativas RSpec 2.8] (https://www.relishapp.com/rspec/rspec-expectations). Lo más parecido a simple_matcher es [definir el asesor] ​​(https://www.relishapp.com/rspec/rspec-expectations/docs/custom-matchers/define-matcher). –

0

tuve esta misma pregunta pero se dio cuenta es un problema hábilmente más fácil & más resistente para agregar una declaración if a su especificación.

it 'can complete my incredible form' do 
    visit '/testing_path' 
    #...dostuff... 

    if object_im_testing.contains_my_condition? 
    current_path.should eq('/special_condition_url') 
    else 
    current_path.should eq('/normal_condition_url') 
    end 
end 

Espero que esto ayude con otra perspectiva. La solución más simple suele ser la mejor.

Cuestiones relacionadas