2010-01-05 19 views
12

Tengo curiosidad por saber si sería valioso, me gustaría empezar a usar QUnit, pero realmente no sé por dónde empezar. En realidad, no voy a mentir, soy nuevo en las pruebas en general, no solo con JS.¿Debería probar mi unidad mi JavaScript?

Espero obtener algunos consejos sobre cómo comenzaría a utilizar las pruebas unitarias con una aplicación que ya tiene una gran cantidad de JavaScript (vale, así que unas 500 líneas, no grandes, serán suficientes para hacerme preguntar si tengo regresión que pasa desapercibida). ¿Cómo recomendaría comenzar y dónde escribiría mis pruebas?

(por ejemplo, su aplicación carriles, donde es un lugar lógico para tener mis pruebas JS, que estaría bien si podían ir en el directorio /test pero es fuera del directorio público y por lo tanto no es posible ... err se es?)

+0

500 líneas no es nada, por cierto. : P –

+0

yah Lo sé, pero definitivamente quiero discutirlo antes de que se descontrole ... ya sabes. –

+0

Definitivamente. Buena suerte, el código de disputas es como pastorear gatos a veces. –

Respuesta

12

Bien, comienza con JsUnit. Sin embargo, parece que eres más curioso acerca de las pruebas unitarias en general.

Las cosas que recibe de la unidad de pruebas (si están bien hechas) son:

  • La capacidad de detectar regresiones en su código, como usted ha mencionado
  • integración
  • menos dolorosa, ya que cada pieza de su código ya está probado por sí
  • una imagen clara de cómo se espera que su código (y no se espera) que se utilizará

Las pruebas unitarias básicamente deben tocar cualquier public método en su código. A veces puede tener motivos para probar métodos privados, y estoy seguro de que puede decidir cuándo puede ser. El objetivo es simple:

  • prueba que el método hace lo correcto con la entrada derecha
  • prueba que el método hace lo correcto con el mal entrada.

De muchas maneras, sus pruebas deben definir la funcionalidad de sus métodos.

A veces, cuando las personas escriben sus pruebas unitarias, "ocultan" intencionadamente cualquier código integrado (es decir, llamadas a métodos que devuelven otros datos de una base de datos, archivo o lógica comercial) y les devuelven datos estáticos. Esto lo ayuda a sentirse más seguro de que solo está probando el código presente en la lógica que está probando.

Es posible que desee read on para obtener más información sobre buenas y malas prácticas de pruebas unitarias.

Editar: No sé mucho acerca de hacer esto en Ruby on Rails, pero podría considerar echar un vistazo a qué some other people are doing. En última instancia, las herramientas disponibles para usted y la estructura de sus pruebas es dependiendo de su marco de trabajo y el idioma.

+0

Entrada impresionante, gracias Ed. leyendo articulo vinculado ahora. –

+0

¡No hay problema, y ​​buena suerte! Las pruebas unitarias pueden parecer un poco raras cuando lo haces por primera vez, pero definitivamente pueden ayudarte a mantener tu código en buen funcionamiento si lo haces bien. –

+0

También sugeriría leer el libro "Trabajar eficazmente con código heredado" de Martin Feathers, para obtener ideas de prueba generales, y permitir la prueba y modificación del código que ya está allí (como apostado en el Desarrollo controlado por prueba - TDD, que comienza con el prueba y completa el código). – jamiebarrow

1

Una de las mejores guías que puede encontrar al incorporar las pruebas en el código anterior es Working Effectively with Legacy Code. En su caso, no tiene una gran cantidad de código del que deba preocuparse. Simplemente comience a ponerlo donde pueda y piense en la forma más fácil en que podría estructurar su código para permitir las pruebas en general.

1

La prueba de JavaScript directamente no es trivial (porque necesita un intérprete "externo", que en el entorno de producción es el navegador). Además, es difícil incluirlo en su entorno de integración continua.

Así que como la prueba de unidad de JavaScript es un esfuerzo muy alto, yo tendería a probar cosas de grano más grueso en las pruebas de integración. Por ejemplo: canoo-webtest incorpora un intérprete de script java. Usted simula acciones de usuario (por ejemplo, haciendo clic en el botón) y se activa javascript. Entonces prueba indirectamente.

Todavía hay algunas cosas de javascript relacionadas con la interfaz de usuario (por ejemplo, fade-effects), etc. Esto debe probarse manualmente.

1

Con rieles, recomendaría Blue Ridge. Es un paquete de ScrewUnit, algunas tareas de rake, junto con la capacidad de ejecutar pruebas fuera del navegador (a través de Rhino). Tenemos bastantes pruebas de Javascript en marcha. Las pruebas son más similares a RSpec que otras herramientas mencionadas, por lo que es menos un cambio en la mentalidad ... ¡funciona muy bien!

Para empezar, el mejor lugar para hacerlo es simplemente comenzar a hurgar en la web para otras personas que han tenido éxito con esto. Hay ejemplos sobre github.

2

Encontré pruebas unitarias con javascript para ser muy útil. Las pruebas unitarias compensarán la falta de seguridad del tipo en el idioma. También le permite verificar rápidamente que su código se ejecute en diferentes navegadores.

Para mis pruebas utilizo QUnit como el corredor de prueba y JSMock para burlarse. Yo uso Firebug para depurarlos.

Hay menos recursos educativos disponibles para aprender a probar en Javascript y luego dicen C# o Java. Las cosas se prueban de manera diferente porque es un lenguaje dinámico ... Podría ser mejor comenzar a probar en C# o Java.

Realmente no me hice efectivo al escribir pruebas unitarias hasta que leí el material en www.xunitpatterns.com. Entonces, si recién está comenzando, diría que compre el libro y léalo.

+0

Actualización: ahora recomendaría usar Jasmine en lugar de QUnit, ver http://pivotal.github.com/jasmine/ –

+0

Por curiosidad, ¿por qué Jasmine en lugar de QUnit? –

+0

algunas razones: la configuración/desmontaje es mucho más suave y flexible. Los espías funcionan muy bien para modificar dependencias ... –

Cuestiones relacionadas