Я пишу модульные тесты для приложения Angular.js (с karma и jasmine) и хочу проверить определенное поведение модуля на этапе CONFIG. Я хотел бы подтвердить, что вызывается определенная функция ПРОВАЙДЕРА. Я думал, что смогу сделать это с помощью шпионажа на методе провайдера, но получить доступ к провайдеру до того, как «ожидается», оказалось довольно сложно. Вот пример кода:
Код модуля (тестируется)
var myApp = angular.module('myApp', ['restangular']);
myApp.config(['RestangularProvider', function (RestangularProvider) {
RestangularProvider.setBaseUrl('http://someurl:someport/');
}]);
Я пробовал различные решения, чтобы получить ссылку на RestangularProvider и применить к нему шпиона, но все потерпело неудачу. Самое близкое, что я смог получить, это код ниже:
Код модульного теста
describe("Test if setBaseUrl was called", function () {
var RestangularProvider;
beforeEach(module('myApp', function(_RestangularProvider_) {
RestangularProvider = _RestangularProvider_;
spyOn(RestangularProvider, "setBaseUrl").and.callThrough();
}));
it("should call setBaseUrl.", function() {
expect(RestangularProvider.setBaseUrl).toHaveBeenCalled();
});
});
На самом деле я получаю ссылку на RestangularProvider, но перед этим вызывается функция «config» модуля, поэтому я думаю, что шпион не настроен.
Я нашел сообщение, в котором автор решил аналогичную ситуацию с «обходным решением», протестировав настроенную «службу» вместо тестирования фактического вызова метода провайдера. В приведенном выше примере я бы проверил Restangular.configuration.baseUrl
в своем ожидании вместо проверки фактического вызова метода setBaseUrl
провайдера, но мне показалось, что в определенных ситуациях этого будет недостаточно.
Я новичок в Angular.js, так что это может быть просто случай полного невежества во всей «этапе тестирования конфигурации», поэтому, если это так, пожалуйста, не стесняйтесь меня прямо :]
Любые предложения, критика или указатели?