2011-02-01 44 views
5

Queremos probar nuestras definiciones de pasos para pepino. Una cosa que nos gustaría poder verificar es que las pruebas que esperamos fallar realmente fallan. Para hacer esto, nos gustaría escribir escenarios que sabemos fallarán y agregarlos a nuestro conjunto de pruebas, pero etiquetarlos o de otra manera denotarlos para que "pasen" si y solo si fallan. ¿Cómo se podría abordar esto?¿Cómo puede fallar el paso y pasar la falla en Cucumber?

Respuesta

0

Debe probar el estado negativo. Un paso que falla es simplemente el inverso de un paso que pasa. Por lo tanto, haga algo como:

Then /i should not be true/ do 
    some_value.should_not be_true 
end 

Así es como me gustaría probar el fallo. También puede capturar las excepciones y tal, y verificar que un bloque de hecho tirar esa excepción

lambda do 
    something_that_horks 
end.should raise_error(Specific::Error) 

Simplemente revertir las pruebas en los casos de prueba para la prueba de resultados negativos, no los resultados positivos.

+0

El propósito aquí no es para poner a prueba que el estado no es verdadero, es para probar que la prueba falla cuando el estado no es verdadero. En otras palabras, estamos probando nuestros pasos, no probando el estado. – kerkeslager

-1

Pasa el interruptor -w en el comando Pepino.

Imprimirá el formato normal; sin embargo, al final dará un resumen que detalla si todos los casos de prueba fallaron y si alguno pasó, especificará cuáles.

0

Este es un ejemplo bastante complejo, pero el resultado final es un método realmente limpio para esperar que fallen los escenarios de pepino. Estos son solo unos pocos componentes pequeños de un proyecto en el que estoy trabajando. El motivo por el que se crea un error al faltar un usuario es porque hay algunos validadores en mi modelo de usuario. Todo el código fuente se puede encontrar here.

características/step_definitions/before_step.rb

Before("[email protected]") do 
    def assert_cucumber(assersion, msg = "an error was thrown") 
    assert(assersion == true, msg) 
    end 
end 

Before("@fails") do 
    def assert_cucumber(assersion, msg = "an error was thrown") 
    assert(assersion == false, msg) 
    end 
end 

características/step_definitions/user_step.rb

Given /^a user with$/ do |params| 
    params = params.rows_hash 
    unless User.find_by({username: params[:username]}) 
    assert_cucumber(User.new(params).save, "could not create user") 
    end 
end 

características/user.feature

Scenario: check if userers exsist 
    Given a user with 
    | username | johnsmith    | 
    | email | [email protected] | 
    | password | password    | 
    Then a user with username "johnsmith" 

@fails 
Scenario: create user with missing data 
    Given a user with 
    | username | johndoe | 
    Then a user with username "johndoe" 
Cuestiones relacionadas