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
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.
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.
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"
- 1. ¿Puede ConcurrentDictionary.TryAdd fallar?
- 2. ¿Bajo qué circunstancias puede fallar ConcurrentBag.TryTake()?
- 3. Javascript Regex debería pasar .test() pero parece fallar, ¿por qué?
- 4. ¿Puede maven-exec-plugin fallar la compilación?
- 5. paso por el puntero y Pasar por referencia
- 6. Notificar al operador si CUALQUIER paso en el trabajo falla
- 7. Cucumber + Webrat + Selenium guide
- 8. ¿Puede fallar alguna vez una instrucción COMMIT (en SQL)? ¿Cómo?
- 9. MVC3 Html.BeginForm - pasar argumentos como RouteValueDictionary falla
- 10. ¿Cómo fallar la solicitud de Ajax en Rails?
- 11. ¿Cómo puede CreateFile fallar con FILE_SHARE_READ y tener éxito con FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE?
- 12. método puede fallar para cerrar la corriente de excepción
- 13. matplotlib, paso a la animación paso
- 14. ¿Cómo paso múltiples parámetros en la URL?
- 15. Excel fallar en cadena CONSULV
- 16. WatiN en MSTest - ClassCleanup fallar
- 17. ¿Cómo puede utilizar C++ el estilo de continuación de paso?
- 18. Cómo integrar Spring into Cucumber
- 19. jUnit fallar() convenciones
- 20. ¿Cómo puedo hacer el paso Tren y prueba en Giza ++?
- 21. lo que es diferente entre el paso por valor y el paso por referencia usando C#
- 22. cómo escribir la prueba de django para fallar?
- 23. Paso a paso y código de depuración en Pruebas unitarias
- 24. Cómo detener el script por lotes en falla del
- 25. Causando PHP fallar
- 26. ¿Cómo paso la variable dentro de find y bash -c?
- 27. ¿Cómo se puede pasar el parámetro en RedirectToAction?
- 28. La inserción de Heroku falla repetidamente, parece fallar al instalar Bonjour
- 29. Ant: cómo fallar si la propiedad contiene una cierta cadena
- 30. tortoisehg paso de confirmación de un paso: cómo y dónde está el archivo de registro
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