tests test spec run rails how ruby-on-rails ruby testing

ruby on rails - test - ¿El pepino elimina la necesidad de escribir pruebas unitarias?



rspec rails (7)

Cuando creas una aplicación Rails, obtienes pruebas funcionales, de interacción y de unidad de forma predeterminada. El pepino es una prueba adicional, es una forma de probar también la experiencia que tendrá el usuario. Cuando hacen clic en el botón etiquetado "ir", deberían ver "éxito" en lugar de un 404. Esto se asegurará de que nada de lo que haga accidentalmente arruine la experiencia del usuario, y que de arriba a abajo, su aplicación funcione para lo más común casos de uso que se pueda imaginar. Las otras pruebas tienen el propósito de asegurar que nada salga mal y que haya inspeccionado algún modelo y método con un microscopio. Puede ser posible replicar las pruebas unitarias en su totalidad con pepino, pero sería doloroso (y de ejecución lenta, especialmente si está usando selenio). El mejor momento para escribir pruebas es cuando estás desarrollando código, y la forma más rápida y sencilla de hacerlo es utilizar las pruebas de rieles incorporadas y tal vez alguna ayuda adicional, como shoulda, rspec, también soy un gran fan de la fabrica. Si aún no lo ha comprobado, www.railscasts.com tiene una excelente introducción al pepino, y rspec, y factory-girl, ... Sé que esta pregunta ya ha sido contestada (no es), pero estos son mis dos centavos. . ¡¡Buena suerte programando !!

Estoy un poco confundido por la gran cantidad de marcos de prueba disponibles para Ruby / ROR.

Recientemente he visto Cucumber Railscasts y me han parecido muy interesantes. Así que empecé a jugar y luego luché para ver conceptualmente dónde pondría varias pruebas.

Parecería que es bastante posible hacer todo lo que se puede hacer en las pruebas unitarias dentro de Cucumber, así que necesito escribir pruebas unitarias o debo escribir mis definiciones de funciones y concentrarme en brindar la mejor cobertura posible. .

¿Debo crear mis pruebas de unidad utilizando Rspec o Prueba: Unidad? Cuando estoy probando la funcionalidad Ajax, ¿debo usar Selenium o Watir?

Parece que hay tantas opciones aquí que estoy luchando para ver qué herramientas usar y dónde están los límites.

¿Cuáles son las experiencias de Cucumber de otras personas y dónde trazar la línea entre escribir Pruebas de integración de pepinos y Pruebas: Unidades basadas en Rspec y / o unidades y pruebas funcionales? Alguien está al tanto de una buena redacción sobre este tema que sugiere dónde trazar líneas entre los métodos de prueba y las fortalezas y debilidades de las diversas herramientas.

Aprecio que parte de esto sea subjetivo, pero los enfoques comunes sobre cómo atacar este problema serían bienvenidos.


Cuando una prueba de unidad falla (me refiero a una prueba de unidad real que prueba un método de forma aislada utilizando simulacros), le dice qué "unidad" tiene un problema. Cuando falla una prueba de aceptación, le indica qué "característica" tiene un problema, no dónde se encuentra el problema.


Desde mi experiencia, Pepino y Rspec tienen un atractivo diferente. Rspec me atrae desde la perspectiva del desarrollador porque es fácil de escribir y proporciona comentarios muy rápidos cuando algo se rompe. Cucumber no me atrae como desarrollador porque no se ejecuta tan rápido como Rspec. Sin embargo, Cucumber me atrae como parte interesada del negocio, ya que proporciona una cobertura completa de todas las funciones.

Hazte un favor y sigue escribiendo pruebas unitarias.


He estado practicando Cucumber / RSpec durante el último medio año más o menos haciendo BDD.

En primer lugar, no es fácil entrar en BDD, se sentirá antinatural al principio.

Pero una vez que te metes en eso, no hay otra manera de hacer programación.

Para responder tu pregunta. Para probar Javascript, necesitará un controlador javascript que pueda ser utilizado por Capybara, que es usado por Cucumber.

capybara-webkit es lo que usan todos los niños geniales ahora en estos días

Hay una cosa importante a tener en cuenta.

Las pruebas de integración son lentas.

Y las pruebas unitarias son rápidas, pero pueden ser lentas, por lo que es importante que use el limpiador de base de datos correcto y escriba buenas pruebas que tengan un buen aislamiento.

Mi configuración de prueba que estoy muy feliz con:

Guardia para cargar spork Spork para pruebas más rápidas Pepino para pruebas de integración capybara-webkit para pruebas de javascript RSpec para pruebas de unidad

No veo pruebas y pruebas de controlador, ya que son redundantes en mi opinión, ya que un buen conocimiento de XPATH te hará escribir pruebas notables que incluso cubrirán el diseño y la estructura de tu página.


He pensado / luchado mucho con esta pregunta, y aquí es donde he llegado.

Pepino primero y pepino último. El pepino proporcionará la cobertura de la prueba primaria.

Los métodos del modelo central que realizan el trabajo comercial real de la aplicación también deben desarrollarse / cubrirse con pruebas rspec / unit.

¿Por qué la unidad prueba también?

1) Las pruebas unitarias se ejecutarán mucho más rápido. 2) Esta lógica de negocios central puede (probablemente) ser utilizada de varias maneras más allá de las vistas actuales (a través de las cuales Cucumber realiza pruebas). Estos métodos deben ser martillados con todos los tipos de entradas y salidas posibles llamando directamente al método en la prueba.

¿Por qué no prueba el resto de los modelos, los controladores y las vistas?

1) El pepino ya lo tiene cubierto una vez. 2) Encuentro que los métodos de vista-controlador-algún-modelo-todos trabajan juntos para hacer las cosas (creo que todo se ejercita para iniciar sesión); Así que me gusta probarlos juntos.


Personalmente no creo que debas dejar de escribir pruebas unitarias. Como herramienta de prueba de aceptación, Cucumber debería reemplazar sus pruebas funcionales y, si escribe, ver las pruebas.

Se supone que las funciones de pepino son simples y están unidas al valor real del usuario que tiene una característica determinada.


Use Cucumber a un alto nivel para describir lo que un usuario debería poder ver y hacer. Use RSpec, Test: Unit, Shoulda, etc. para escribir pruebas unitarias. Directamente de la boca del caballo :

Cuando decida que desea agregar una nueva característica o corregir un error, comience escribiendo una nueva característica o escenario que describa cómo debería funcionar la característica. No escriba ningún código (todavía).

...

Esto es cuando empiezas a escribir código. Comience escribiendo un par de líneas de código para solucionar la falla que recibió de Cucumber. Ejecutar pepino de nuevo. Repita y enjuague hasta que esté satisfecho con su función. Cuando llegues a los detalles básicos, desplázate un nivel de abstracción y usa RSpec, o cualquier marco de prueba de Ruby, para escribir algunas especificaciones / pruebas para tus clases.

El pepino está hecho para probar toda tu pila, en conjunto, en lugar de "unidades".

Debe decidir dónde dibujar la línea, pero muchas cosas debajo del capó probablemente no se cubrirán en una prueba de pepino. Diga que cuando me inscribo, completo un formulario con mi nombre, correo electrónico, número de teléfono, etc. Una prueba de unidad puede verificar que un nuevo User también creará un nuevo Número de TelephoneNumber . Desde la perspectiva del usuario, realmente no les importa que cree un nuevo Número de TelephoneNumber , les importa que una vez que se hayan registrado, tengan una cuenta y puedan ver su número de teléfono.

No tengo mucha experiencia escribiendo pruebas de pepino (todavía no), pero espero que esto ayude un poco.