2013-09-07 11 views
8

Ho un'applicazione angularjs, che ho generato con yeoman. Nel karma.conf.js è un riferimento a test/mock/**/*. Js. Ho difficoltà a scoprire come utilizzo questa cartella. Attualmente ho un semplice servizio:usando la falsa cartella per il test del karma in yeoman angularjs

'use strict'; 

angular.module('tvcalApp') 
    .factory('Series', function ($resource) { 
    return $resource('/search/:search'); 
    }); 

e un test

'use strict'; 

var $httpBackend; 

describe('Service: Series', function() { 

    // load the service's module 
    beforeEach(module('tvcalApp')); 

    // instantiate service 
    var Series; 
    beforeEach(inject(function (_Series_) { 
    Series = _Series_; 
    })); 

    beforeEach(inject(function ($injector) { 
     var url_get = '/search/The%20Simpsons'; 

     var response_get = [{"seriesid": "71663"}]; 

     $httpBackend = $injector.get('$httpBackend'); 

     $httpBackend.whenGET(url_get).respond(response_get); 

    })); 

    it('should return a list if search for The Simpsons', function() { 
     var res = Series.query({search: 'The Simpsons'}); 
     $httpBackend.flush(); 
     expect(res[0].seriesid === 71663); 
     }); 

}); 

Questo è il lavoro. Ma mi chiedo se potrei usare la cartella finta di karma.conf.js per la funzione di derisione. È possibile spostare la parte del mock nella cartella finta e usarla per tutti i test unitari?

Non ho trovato alcun esempio o documentazione per questa cartella. Qualcuno può per favore indicarmi un esempio o una documentazione su come usare la cartella finta.

+0

Sei riuscito a ottenere qualche informazione su questo? – gerasalus

risposta

7

Fondamentalmente ho fatto qualcosa di simile guardando angular-mocks.js:
Diciamo che l'app si chiama ql. e ho un loginService che voglio prendere in giro:

schernisce/servicesMock.js assomiglia a questo:

'use strict'; 

var ql = {}; 
ql.mock = {}; 

ql.mock.$loginServiceMockProvider = function() { 
    this.$get = function() { 
    var $service = { 
     login: function() { } 
    }; 
    return $service; 
    }; 
}; 

angular.module('qlMock', ['ng']).provider({ 
    $loginServiceMock: ql.mock.$loginServiceMockProvider 
}); 

Poi nel mio test posso injeck $ loginServiceMock:

'use strict'; 

describe('LoginController tests', function() { 
    // load the controller's module 
    beforeEach(module('ql')); 
    // load our mocks module 
    beforeEach(angular.mock.module('qlMock')); 

    var loginController, 
    loginServiceMock, 
    scope; 

    // Initialize the controller and a mock scope 
    // $loginSericeMock will be injected from serviceMocks.js file 
    beforeEach(inject(function ($controller, $rootScope, $loginServiceMock) { 
    scope = $rootScope.$new(); 
    loginServiceMock = $loginServiceMock; 
    loginController = $controller('LoginController', { 
     $scope: scope, 
     loginService: loginServiceMock 
    }); 
    })); 
}); 
3

L'esempio di @gerasalus è utile, ma per rispondere alla domanda:

mocks è solo una cartella in cui inserire il codice per mantenere il tuo progetto organizzato e il codice nei test brevi e per il punto. Mantenendo tutte le tue schifezze in un posto, è più facile riutilizzarle nei test ... copiarle da un test a un altro sarebbe una cattiva pratica dal punto di vista di DRY.

Così, per esempio, si potrebbe avere un servizio chiamato 'Foo'

app/service/foo.js 

allora si potrebbe creare un modello di tale servizio, chiamato 'FooMock'

test/mocks/service/foo.js 

E allora si avrebbe creare test e iniettare qualunque cosa di cui hai bisogno, come mostrato nella risposta di gerasulus.

Problemi correlati