2012-08-13 13 views
33

Ci sono molti documenti che mostrano come aggiungere un matcher ad una specifica Jasmine (here, per esempio).C'è un modo per aggiungere un rilevatore Jasmine all'intero ambiente

Qualcuno ha trovato un modo per aggiungere abbinamenti a tutto l'ambiente; Sto cercando di creare una serie di abbinamenti utili da chiamare con qualsiasi e tutti i test, senza copypasta su tutte le mie specifiche.

Attualmente funziona per decodificare la sorgente, ma preferirebbe un metodo provato e true, se ne esiste uno.

risposta

47

Certo, basta chiamare beforeEach() senza alcuna spec scope e aggiungere i corrispondenti.

Ciò aggiungerebbe globalmente un uguaglianza toBeOfType.

beforeEach(function() { 
    var matchers = { 
    toBeOfType: function(typeString) { 
     return typeof this.actual == typeString; 
    } 
    }; 

    this.addMatchers(matchers); 
}); 

describe('Thing', function() { 
    // matchers available here. 
}); 

Ho fatto un file chiamato spec_helper.js pieno di cose come matchers personalizzati che ho solo bisogno di caricare sulla pagina prima ho eseguito il resto della suite spec.

+1

Ho anche trovato un bell'esempio qui: http://tobyho.com/2012/01/30/write-a-jasmine-matcher/ – Dancrumb

+0

ho provato link condiviso da Dancrumb, idealmente il suo approccio ordinato e pulito tuttavia non ha funzionato, quindi ho adottato l'approccio di Alex. – joy

+2

Ecco uno per Jasmine 2.0+ '' '' javascript beforeeach (function() { jasmine.addMatchers ({ toEqualData: function() {{ ritorno confronto: la funzione (reale, atteso) {{ ritorno pass: angular.equals (actual, expected)} } } } }); }); '' '' – mikker

12

Ecco uno per il gelsomino 2.0+:

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

notare che utilizzando di angolare angular.equals.

+0

Questo non funziona per me .. scrivere gli argomenti di confronto è sempre un oggetto vuoto. –

+1

Questa è la risposta che stavo cercando! –

0

Modifica: non sapevo che fosse un'implementazione interna che potrebbe essere soggetta a modifiche. Utilizzare a proprio rischio.

jasmine.Expectation.addCoreMatchers(matchers) 
0

Sulla base delle risposte precedenti, ho creato la seguente configurazione per angolare cli. Ho anche bisogno di un modulo esterno a mio matcher (in questo caso moment.js)

Nota In questo esempio ho aggiunto un equalityTester, ma dovrebbe funzionare con un matcher cliente

Creare un file con l'src/spec_helper.ts seguenti contenuti:

// 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); 
     } 
    }); 
    }); 

} 

Poi, nel src/test.ts importare la funzione initSpecHelper() aggiungere eseguirlo. L'ho posizionato prima dell'iniziale TestBed di Angular, che sembra funzionare bene.

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() 
); 

//... 
Problemi correlati