Tipo de.
Es es una forma de organizar las pruebas, pero es más que eso. Se comporta como se suponía que debían las pruebas de integración originales de Rails, pero es mucho más fácil de usar. La gran victoria aquí es que su sesión se mantiene de forma transparente en todo el Scenario
.
Otra cosa que está pasando con Cucumber es que se supone que (usted debe estar) probando desde el punto de vista de un navegador o cliente utilizando su código. Si lo desea, puede usar los pasos para construir objetos y configurar el estado, pero generalmente desea que sus pasos sean los necesarios para lograr ese estado en primer lugar.
Por ejemplo, usted podría hacer esto:
Given /I have a user account/ do
@user = Factory.create(:user)
# ... more user set up
end
Pero probablemente debería hacer algo como esto en su lugar:
Given /I have a user account/ do
visit new_user_url
fill_in "user_login", :with => "some name"
fill_in "user_password", :with => "foo"
# ... whatever else your sign up page needs
end
Y, por supuesto, se puede pasar en los argumentos a cualquiera de esos pasos para darle a su código de llamada un control más detallado sobre el comportamiento del paso.
Lo que generalmente he estado haciendo con mis pruebas es el siguiente.
- Uso shoulda, pero rspec también está bien.
- Escribo mis pruebas de autenticación negativa (es decir, se espera el acceso denegado) como pruebas funcionales de Rails.
- Escribo mis pruebas de autenticación positiva (es decir, usuarios que hacen lo que se supone que deben hacer) como funciones de Cucumber.
Y, por supuesto, todavía escribir pruebas unitarias rieles para mis modelos, bibliotecas, ayudantes, etc.
No estoy de acuerdo con que el ejemplo "debería" sea mejor que el ejemplo "podría". El consenso general es que está perfectamente bien usar fábricas en los pasos dados para establecer condiciones previas para lo que en realidad se prueba en los pasos de When. –
Claro. Yo uso fábricas en algunos de mis pasos también. Hay un nivel decente de subjetividad involucrado. Estaba tratando de señalar el propósito general de Cucumber (conducir su software como lo haría un usuario). No estaba tratando de prescribir una manera verdadera de escribir todos los pasos. – jdl