2013-02-20 24 views
5

Sono nuovo per le prove di unità e cerco di capire le cose. Sto facendo del mio meglio per seguire questo tutorial: http://www.yearofmoo.com/2013/01/full-spectrum-testing-with-angularjs-and-testacular.html#testing-filters. Nella mia app AngularJS ho un filtro che devo testare. Ho installato Node, Testacular e Jasmine e funzionano correttamente. Il filtro che sto cercando di testare è piuttosto semplice:Test di presenza del filtro in angolare

myApp.filter('bill_ship', function() { 
    return function (userData) { 
     var output = "---"; 
     switch (userData) { 
      case "0": 
       output = "Billing"; 
       break; 
      case "1": 
       output = "Shipping"; 
       break; 
     } 
     return output; 
    } 
}); 

pensavo di avere la mia prova impostato correttamente, ma fallisce in modo coerente.

describe("Unit Testing: Filters - ", function() { 
    beforeEach(angular.mock.module('prismApp', ['bill_ship'])); 

    //BillShip Filter 
    it('should have a bill-ship filter: ', inject(function($filter){ 
     expect($filter('bill_ship')).not.toEqual(null); 
    })); 
}); 

non riesce con questo messaggio: Errore: argomento 'fn' non è una funzione, ha ottenuto stringa dal bill_ship.

Quindi ... dove sto facendo questo sbagliato?

+0

'bill_ship' è anche il nome del modulo in cui si trova il filtro' bill_ship'? Se il filtro si trova nel modulo 'prismApp', non dovresti passare' ['bill_ship'] 'come secondo parametro a' angular.mock.module'. –

+0

L'app Angolare si trova in un file separato dal filtro: var myApp = angular.module ("prismApp", []); Il filtro è dichiarato esattamente come mostrato. Se lascio il secondo parametro, mi viene in mente un provider sconosciuto: Errore: provider sconosciuto: bill_shipFilterProvider <- bill_shipFilter – MBielski

+0

Puoi provare a usare 'beforeEach (module ('prismApp'));' invece? Questo è il modo in cui abbiamo il beforeEach per il corretto funzionamento dei test dei filtri - la funzione 'it (...' sembra corretta. –

risposta

1

Ok, questo il motivo per cui non dovrebbe mai codice senza caffine ...

Aiuta molto quando si mette i file che si desidera testare nel file di configurazione. Ragazzo mi sento stupido.

+0

Btw. Dovresti selezionare la tua soluzione per essere la risposta – mlunoe

+0

Grazie per averlo fatto notare – MBielski

24

Se qualcun altro si sta chiedendo (trascorro un po 'di tempo prima di scoprirlo) ho pensato che il modo di iniettare i filtri di @MBielski fosse un po' confuso, ma fa sbrigativamente il lavoro! Tuttavia, ho trovato che questo è un buon modo per iniettare filtri nell'ambiente di test dell'unità jasmine per testarli.

Ecco la definizione del filtro:

angular.module('prismApp.filters', []) 

    .filter('billShip', function() { 
    return function (userData) { 
     // define filter 
     ... 
    } 
    }); 

E il test:

describe("Unit Testing: Filters - ", function() { 
    var billShip; 

    // load the module 
    beforeEach(module('prismApp.filters')); 

    // load filter function into variable 
    beforeEach(inject(function ($filter) { 
    billShip = $filter('billShip'); 
    })); 

    // test billShip filter 
    it('should have a bill-ship filter: ', function() { 
    // test away! 
    expect(billShip).not.toEqual(null); 
    expect(billShip("0")).toEqual("Billing"); 
    ... 
    }); 
}); 

Spero che questo aiuti chiunque altro.

+0

Ehi, questo è abbastanza lucido! Grazie per averlo postato! – MBielski

+0

upvote se la pensi così? – mlunoe

Problemi correlati