jasmine jasmine-matchers

¿Hay alguna manera de agregar un matcher Jasmine a todo el entorno?



jasmine-matchers (4)

Claro, simplemente llama antes de beforeEach() sin ningún ámbito de especificación en absoluto, y agrega los matchers allí.

Esto agregaría globalmente un toBeOfType toBeOfType.

beforeEach(function() { var matchers = { toBeOfType: function(typeString) { return typeof this.actual == typeString; } }; this.addMatchers(matchers); }); describe(''Thing'', function() { // matchers available here. });

He creado un archivo llamado spec_helper.js lleno de elementos como los adaptadores personalizados que solo debo cargar en la página antes de ejecutar el resto del conjunto de especificaciones.

Hay muchos documentos que muestran cómo agregar una coincidencia a una especificación de Jasmine ( aquí , por ejemplo).

¿Alguien ha encontrado una manera de agregar matchers a todo el entorno? Estoy queriendo crear un conjunto de combinaciones útiles a las que puedan llamar todas y cada una de las pruebas, sin copypasta en todas mis especificaciones.

Actualmente estoy trabajando para realizar ingeniería inversa en la fuente, pero preferiría un método probado y verdadero, si existe.


Aquí hay uno para jazmín 2.0+:

beforeEach(function(){ jasmine.addMatchers({ toEqualData: function() { return { compare: function(actual, expected) { return { pass: angular.equals(actual, expected) }; } }; } }); });

Tenga en cuenta que esto utiliza angular.equals angular.


Editar: No sabía que era una implementación interna que puede estar sujeta a cambios. Úselo bajo su propio riesgo.

jasmine.Expectation.addCoreMatchers(matchers)


Basado en respuestas anteriores, creé la siguiente configuración para angular-cli . También necesito un módulo externo en mi matcher (en este caso moment.js)

Nota En este ejemplo, agregué un equalityTester, pero debería funcionar con un matcher de cliente

Cree un archivo src/spec_helper.ts con los siguientes contenidos:

// Import module import { Moment } from ''moment''; export function initSpecHelper() { beforeEach(() => { // Add your matcher jasmine.addCustomEqualityTester((a: Moment, b: Moment) => { if (typeof a.isSame === ''function'') { return a.isSame(b); } }); }); }

Luego, en src/test.ts importe la función initSpecHelper() ejecútelo. Lo coloqué antes del test TestBed de Angular, que parece funcionar bien.

import { initSpecHelper } from ''./spec_helper''; //... // Prevent Karma from running prematurely. __karma__.loaded = function () {}; // Init our own spec helper initSpecHelper(); // First, initialize the Angular testing environment. getTestBed().initTestEnvironment( BrowserDynamicTestingModule, platformBrowserDynamicTesting() ); //...