5

He estado escribiendo pruebas unitarias en lenguajes fuertemente tipados y tengo una buena comprensión al respecto. Cuando escribo pruebas unitarias en JavaScript para verificar si ciertas funciones funcionan correctamente en ciertos navegadores, vuelvo a las pruebas manuales. No entiendo cómo funciona. Porque JavaScript está destinado a cerrar la brecha entre los datos y la presentación y hacerlo más interactivo. Y todo está sucediendo dentro de los navegadores y tiene más que ver con la interfaz de usuario. así que estoy asumiendo que si yo fuera a escribir una prueba unitaria que iba a escribir algo así como (en pseudocódigo):Conceptos/prácticas de pruebas de unidades generales en JavaScript contra diferentes navegadores?

run function A 
check DOM if certain element has been created 
    if not then fail 
check if element is visible 
    if not then fail 
check for the content of that element 
    if null then fail 
etc… 

Escribiendo estas pruebas parecen como “codificación duro” para mí y lo que falta es que la las pruebas no podrían decir si se ha renderizado correctamente, solo está haciendo las pruebas funcionales puras. Así que me pregunto si alguien me puede explicar cuáles son los procedimientos de prueba adecuados en JavaScript, cómo crear automatizaciones y algunos conceptos generales al hacerlo. Solo estaba mirando John Resig's project testswarm pero todavía tengo que averiguar de qué se trata. También estoy leyendo acerca de QUnit en este momento.

Estoy buscando materiales introductorios sobre los conceptos/prácticas que puedo comenzar. No busco bibliotecas o herramientas específicas a menos que tengan una buena introducción sobre los conceptos.

Gracias.

Respuesta

4

Esto es definitivamente un área confusa y dinámica del desarrollo web en este momento. En mi opinión, hay algunas diferencias de características importantes de las pruebas JS:

  • pruebas de unidades puras, que prueban el código JavaScript plano. Puede afirmar que a+b=3, o lo que sea. Hemos tenido solo algunos problemas que encajan en esta categoría. Cuando hay opciones de discusión, hay muchas alternativas a JSUnit (un puerto JUnit). Se dividen en TDD frente a BDD y las opciones de nombres dentro de esas categorías.
  • Javascript + pruebas de DOM. Gran parte del código escrito en estos días se trata de manipular el DOM. p.ej. assertEqual('<a><div /></a>', $('div').wrap('a')); Para las pruebas JS basadas en DOM, debe pasar a las pruebas en el navegador o usar una biblioteca como env.js.
  • También están burlando & stubbing (humo), asíncrono y otros ayudantes

Hay dos lugares pruebas se pueden ejecutar:

  • fuera del navegador de prueba (generalmente más rápido para funcionar así, resultados de los ensayos que pueden ser utilizados en un entorno TDD)
  • pruebas en el navegador (más lento, más complicado, pero proporcionan más precisos transversal navegador)

Selenium se ejecuta en el navegador, por lo que es ideal para pruebas de integración. Si no tienes nada más trabajando, este es un buen punto de partida. Ha existido por algunos años y es compatible con los navegadores e idiomas más populares. Ver a screencast like this podría ser útil. Y this documentation podría darle una idea de cómo se verían las pruebas. También hay muchos otros tutoriales y screencasts alrededor, pero muchos de ellos se atascan en el doodoo técnico que no te importa, por lo que debes ser selectivo.

Por último, he aquí un ejemplo de blue ridge, que es una colección de herramientas juntó para las pruebas fuera del navegador (y manual de prueba en el navegador) para los rieles:

Screw.Unit(function() { 
    describe("Your application javascript", function() { 
     it("accesses the DOM from fixtures/application.html", function() { 
      expect($$('.select_me').length).to(equal, 2); 
     }); 
    }); 
}); 

Ésta es una sola prueba usando una prueba de prueba de sintaxis tipo rspec que hay un par de elementos allí. ¡Espero que esto ayude!

0

Oigo acerca de Selenium a veces. Nunca lo he usado, pero tal vez podría ayudarte.

selenio control remoto (RC) se ejecuta sus pruebas en varios navegadores y plataformas . Ajuste sus pruebas en su idioma preferido .

También encontré un artículo en el blog: Unit Testing in JavaScript, por lo que menciona: Looking for a better JavaScript unit test tool.

+0

Gracias, pero no estoy buscando marcos específicos, lo que estoy buscando es entender los conceptos para hacer pruebas unitarias en javascript, específicamente en diferentes navegadores. – Jeff

+0

Nunca sabrá qué se adapta a sus necesidades hasta que pruebe con un par de herramientas diferentes. Por lo que entiendo, de las personas que realizan la prueba, todos tienen su forma de evaluar, dependiendo de cómo JS se ajuste a la solución general. – montrealist

0

Usted puede tratar de utilizar Test Swarm

+0

Actualmente está en alfa y solo está abierto para proyectos de código abierto, parece. – nickf

1

Es posible que desee considerar el uso del patrón de presentador para su JavaScript y simplemente usando pruebas unitarias simples. El Blog de pruebas de Google tiene algunos recursos decentes.

me gustaría empezar aquí: Proyectos de

http://googletesting.blogspot.com/2009/02/with-all-sport-drug-scandals-of-late.html

que he hecho esto en Flex (ActionScript) para toda mi código de interfaz de usuario y encontramos que ha estado trabajando muy bien. Desea aislar su funcionalidad para evitar probar cosas que ya han sido probadas extensamente por los proveedores del navegador.

+0

También verifique este enlace que encontré en los comentarios de la publicación vinculada: http://www.atomicobject.com/pages/Presenter+First – camwest

2

Compruebe jsTestDriver. Creo que este es uno de los mejores:

El objetivo de JsTestDriver es construir un corredor de prueba JavaScript cuales:

se integra fácilmente con continua construye sistemas y permite un funcionamiento pruebas en varios navegadores rápidamente a facilidad de desarrollo de estilo TDD.

http://code.google.com/p/js-test-driver/

+0

Estoy leyendo la introducción ahora para tener una idea. – Jeff

Cuestiones relacionadas