unitarias pruebas page navigationend change angular unit-testing jasmine karma-runner angular-cli

pruebas - router angular navigationend



¿Cómo puedo ejecutar pruebas con un navegador sin cabeza? (2)

Utilizando:

ng test

Angular CLI ejecuta las pruebas de forma predeterminada en Chrome, lo cual es genial, pero ¿qué sucede si necesito ejecutarlas en un entorno de consola solamente (navegador sin cabeza)?

También sería bueno si puedo especificar si quiero o no navegadores cada vez que lo ejecuto, así que algo como:

ng test --browsers MyHeadLessBrowser

Editar :

corriendo PhantomJS tengo lo siguiente:

PhantomJS 2.1.1 (Linux 0.0.0) ERROR TypeError: useValue, useFactory, ¡los datos no son iterables! en http://localhost:9876/_karma_webpack_/polyfills.bundle.js:854

eferenceError: No se puede encontrar la variable: Intl en http://localhost:9876/_karma_webpack_/vendor.bundle.js (línea 49362) intlDateFormat @ http://localhost:9876/_karma_webpack_/vendor.bundle.js:49362:20


Esto debería funcionar:

npm i --save-dev karma-phantomjs-launcher

Luego modifique la propiedad de los complementos del archivo karma.conf.js, agregando el complemento PhantomJS a la lista. También agregue PhantomJS a la propiedad del navegador.

plugins: [ require( ''karma-jasmine'' ), require( ''karma-chrome-launcher'' ), require( ''karma-phantomjs-launcher'' ), require( ''karma-remap-istanbul'' ), require( ''angular-cli/plugins/karma'' ) ], ... browsers: [ ''PhantomJS'', ''Chrome'' ],

Como desea una experiencia completamente sin cabeza, puede eliminar Chrome de la propiedad de los navegadores y también eliminar el lanzador karma-chrome de la matriz de complementos.


Como una respuesta más completa basada en la de William Hampshire , el comentario de Cuga y mis adiciones personales.

Respuesta corta: usando ChromeHeadless

Puedes usar Chrome sin cabeza :

ng test --browsers ChromeHeadless

Necesitas tener Chrome 59+.

Pero si necesita PhantomJS (y / o cambiar el comportamiento predeterminado de la ng test sin argumentos) lea lo siguiente.

Respuesta más larga: usando PhantomJS

EDITAR: tenga en cuenta que el proyecto PhantomJS ha sido archivado , vea este hilo .

Preparar

Para poder (opcionalmente) ejecutar sus pruebas sin un navegador, utilizando PhantomJS, debe:

1) Instalar algunas dependencias:

npm install --save-dev karma-phantomjs-launcher npm install --save intl

2) Agregar PhantomJS a la lista de complementos del Karma

Abra karma.conf.js y agregue require(''karma-phantomjs-launcher'') a la matriz de plugins , por ejemplo:

module.exports = function (config) { config.set({ basePath: '''', frameworks: [''jasmine'', ''@angular/cli''], plugins: [ require(''karma-jasmine''), require(''karma-chrome-launcher''), require(''karma-phantomjs-launcher''), // ... ],

3) Habilitar polyfills

Abra su archivo src/polyfills.ts y descomente las siguientes líneas:

POLYFILLS DE NAVEGADOR

import ''core-js/es6/symbol''; import ''core-js/es6/object''; import ''core-js/es6/function''; import ''core-js/es6/parse-int''; import ''core-js/es6/parse-float''; import ''core-js/es6/number''; import ''core-js/es6/math''; import ''core-js/es6/string''; import ''core-js/es6/date''; import ''core-js/es6/array''; import ''core-js/es6/regexp''; import ''core-js/es6/map''; import ''core-js/es6/weak-map''; import ''core-js/es6/set'';

IMPORTACIONES DE APLICACION

import ''intl''; import ''intl/locale-data/jsonp/en'';

Cómo ejecutar las pruebas

Especificando los navegadores al ejecutar el comando

No, puede ejecutar la prueba usando Chrome (el valor predeterminado de angular-cli):

ng test --browsers Chrome

O PhantomJS (sin cabeza):

ng test --browsers PhantomJS

Cambiando el comportamiento predeterminado de solo ng test

Es posible cambiar el comportamiento predeterminado de ng test (por lo tanto, cuando no se proporciona el argumento --browsers ) cambiando el valor de la matriz de browsers en karma.conf.js .

Ahora se puede configurar para que solo use Chrome (configuración predeterminada de ángulo-cli):

browsers: [''Chrome''],

o PhantomJS :

browsers: [''PhantomJS''],

o incluso ambos:

browsers: [''Chrome'', ''PhantomJS''],