2013-09-07 9 views
8

Mam aplikację angularjs, którą wygenerowałem z pomocą. W pliku karma.conf.js znajduje się odwołanie do test/mock/**/*. Js. Mam kłopot, aby dowiedzieć się, w jaki sposób korzystam z tego folderu. Obecnie mam proste Usługa:za pomocą katalogu próbnego do testu karmy w języku łacińskim angularjs

'use strict'; 

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

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

}); 

to działa. Ale zastanawiam się, czy mógłbym użyć fałszywego folderu z pliku karma.conf.js do kpiny. Czy możliwe jest przeniesienie fałszywej części do fałszywego folderu i użycie go do testu wszystkich jednostek?

Nie mogłem znaleźć żadnego przykładu ani dokumentacji dla tego folderu. Czy ktoś może wskazać mi przykład lub dokumentację, jak korzystać z fałszywego folderu.

+0

Czy udało Ci się uzyskać jakiekolwiek informacje na ten temat? – gerasalus

Odpowiedz

7

Zasadniczo zrobiłem coś takiego patrząc na kątowe-mocks.js:
Powiedzmy, że aplikacja może być nazywana ql. i mam loginService że chcę drwić:

mocks/servicesMock.js wygląda następująco:

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

Następnie w moich testach mogę 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

Przykład przez @gerasalus jest przydatny, ale aby odpowiedzieć na pytanie:

mocks to tylko folder do umieszczenia kodu, aby utrzymać swój projekt zorganizowany, a kod w testach krótki i punkt. Trzymając wszystkie swoje drwiny w jednym miejscu, łatwiej je ponownie wykorzystać w testach ... skopiowanie ich z jednego testu do drugiego byłoby złym zwyczajem z perspektywy DRY.

Tak więc, na przykład, może mieć usługę o nazwie 'Foo'

app/service/foo.js 

Następnie można utworzyć mock tej usługi, o nazwie 'FooMock'

test/mocks/service/foo.js 

I wtedy byś stwórz testy i wstrząśnij czymkolwiek, czego potrzebujesz, tak jak pokazano w odpowiedzi udzielonej przez gerasulusa.

Powiązane problemy