¿Existe una forma correcta de hacer esto? Estoy escribiendo una extensión que interactúa con un sitio web como una secuencia de comandos de contenido y guarda datos utilizando el almacenamiento local. ¿Hay alguna herramienta, marco, etc. que pueda usar para probar este comportamiento? Me doy cuenta de que hay algunas herramientas genéricas para probar JavaScript, pero ¿son lo suficientemente potentes para probar una extensión? Las pruebas unitarias son las más importantes, pero también me interesan otros tipos de pruebas (como las pruebas de integración).
154
Respuestas:
Sí, los marcos existentes son bastante útiles.
En el pasado reciente, he colocado todas mis pruebas en una página de "prueba" que estaba incrustada en la aplicación pero que no es accesible a menos que esté escrita físicamente.
Por ejemplo, tendría todas las pruebas en una página accesible bajo
chrome-extension://asdasdasdasdad/unittests.html
Las pruebas tendrían acceso a
localStorage
etc. Para acceder a los scripts de contenido, en teoría podría probarlo a través de IFRAME incrustados en su página de prueba, sin embargo, estas son más pruebas de nivel de integración, las pruebas unitarias requerirían que abstraiga eso de páginas reales para que pueda no dependa de ellos, del mismo modo con acceso a localStorage.Si desea probar páginas directamente, puede orquestar su extensión para abrir pestañas nuevas (chrome.tab.create ({"url": "someurl"}). Para cada una de las pestañas nuevas, su script de contenido debe ejecutarse y puede usar su marco de prueba para verificar que su código haya hecho lo que debería hacer.
En cuanto a los frameworks, JsUnit o el Jasmine más reciente deberían funcionar bien.
fuente
Trabajando en varias extensiones de Chrome, se me ocurrió un
sinon-chrome
proyecto que permite ejecutar pruebas unitarias usandomocha
,nodejs
yphantomjs
.Básicamente, crea simulacros de sinon de todas las
chrome.*
API donde puede colocar cualquier respuesta json predefinida.Luego, carga sus scripts usando los nodos
vm.runInNewContext
para la página de fondo yphantomjs
para la página emergente / opciones de renderizado.Y finalmente, usted afirma que la API de Chrome se llamó con los argumentos necesarios.
Tomemos un ejemplo:
supongamos que tenemos una extensión simple de Chrome que muestra el número de pestañas abiertas en la insignia del botón.
página de fondo:
Para probarlo necesitamos:
chrome.tabs.query
para devolver una respuesta predefinida, por ejemplo, dos pestañas.chrome.*
api burlada en algún entornoEl fragmento de código es el siguiente:
Ahora podemos envolverlo en las
describe..it
funciones de mocha y ejecutarlo desde la terminal:Puedes encontrar el ejemplo completo aquí .
Además, sinon-chrome permite activar cualquier evento de chrome con una respuesta predefinida, p. Ej.
fuente
Si bien
sinon.js
parece funcionar muy bien, también puede usar Jasmine simple y burlarse de las devoluciones de llamada de Chrome que necesita. Ejemplo:Burlarse de
Prueba
Simplemente modifique el valor predeterminado
SpecRunner.html
para ejecutar su código.fuente
Acerca de la herramienta ya existente en Chrome:
En la herramienta para desarrolladores de Chrome, hay una sección de Recursos para el almacenamiento local.
Herramientas para desarrolladores> Recursos> Almacenamiento local
Vea los cambios de almacenamiento local allí.
Puede usar console.profile para probar el rendimiento y ver la pila de llamadas en tiempo de ejecución.
Si utiliza el script de contenido y el almacenamiento local juntos sin la página / script de fondo y sin pasar el mensaje, solo se podrá acceder al almacenamiento local desde ese sitio. Entonces, para probar esas páginas, debe inyectar su script de prueba en esas pestañas.
fuente
Descubrí que puedo usar el controlador web Selenium para iniciar una nueva instancia del navegador con una extensión preinstalada y pyautogui para los clics, porque Selenium no puede manejar la "vista" de la extensión. Después de los clics, puede hacer capturas de pantalla y compararlas con las 'esperadas', esperando un 95% de similitud (porque en diferentes navegadores es aceptable realizar movimientos de marcado a unos pocos píxeles).
fuente
Para confirmar un par de respuestas anteriores, Jasmine parece funcionar bien con las extensiones de Chrome. Estoy usando la versión 3.4.0.
Puede usar espías Jasmine para crear fácilmente dobles de prueba para las diversas API. No es necesario construir el suyo desde cero. Por ejemplo:
Algunos detalles más, si ayuda:
Como se mencionó en otra respuesta, creé una página HTML como parte de la extensión de mi navegador que ejecuta mis pruebas. La página HTML incluye la biblioteca Jasmine, más el código JavaScript de mi extensión, más mi conjunto de pruebas. Las pruebas se ejecutan automáticamente y los resultados están formateados para usted. No es necesario construir un corredor de prueba o un formateador de resultados. Simplemente siga las instrucciones de instalación , y use el HTML documentado allí para crear su página de corredor de prueba, e incluya también su conjunto de pruebas en la página.
No creo que pueda obtener el marco de Jasmine dinámicamente desde otro host, por lo que acabo de incluir el lanzamiento de Jasmine en mi extensión. Lo omitiré y también mis casos de prueba cuando construya mi extensión para producción, por supuesto.
No he visto cómo ejecutar mis pruebas en la línea de comando. Eso sería útil para las herramientas de implementación automatizadas.
fuente