Я тестирую провайдера в Jasmine, который опирается на другого провайдера. Конфигурация, связанная с этим провайдером, отсутствует. Когда насмешливый поставщика, я прочитал, вы должны использовать что-то вродеМоментальный пользовательский поставщик, введенный в провайдер при модульном тестировании Угловой в Жасмине
beforeEach(module(function ($provide) {
mockInjectedProvider = { };
$provide.value('injected', mockInjectedProvider);
}));
, который прекрасно работает для меня, когда инъекционные пользовательского поставщика в службу. При введении их в провайдер это не работает. Код не прерывается, но то, что выполняется, когда тестирование является фактическим провайдером, а не издевательством. Приведенный ниже пример.
var mockInjectedProvider;
beforeEach(function() {
module('myModule');
});
beforeEach(module(function ($provide) {
mockInjectedProvider = {
myFunc: function() {
return "testvalue"
}
}
};
$provide.value('injected', mockInjectedProvider);
}));
beforeEach(inject(function (_base_) {
baseProvider = _base_;
}));
it("injectedProvider should be mocked", function() {
var resultFromMockedProvider = baseProvider.executeMyFuncFromInjected();
expect(resultFromMockedProvider).toEqual("testvalue");
}); // Here instead of using my mock it executes the actual dependency
$provide.value
В заявлении я попытался в том числе как injected
и injectedProvider
, а также с помощью $provide.provider
и насмешливый на $get
функцию на нем, но ничего не похоже на работу. Я просто не могу заставить его высмеять фактического провайдера. Тезисный базовый провайдер выглядит так.
(function (ng, module) {
module.provider("base",
["injectedProvider", function (injectedProvider) {
this.executeMyFuncFromInjected= function() {
return injectedProvider.myFunc(); // let's say this returns "realvalue"
}
this.$get = function() {
return this;
};
}]
);
})(window.angular, window.angular.module("myModule"));
Все, что работает в моем коде, кроме насмешливого Жасмина.
Я думаю, что вы должны использовать метод 'provider' вместо метода' value'. например, '$ provider.provider ('injected', mockInjectedProvider)'; – Raulucco
Как я уже сказал, попробовал '$ offer.провайдер' уже. Конечный результат точно такой же. – Jan
Да, извините. На самом деле я понимаю, что на самом деле вам не следует проверять функцию, которая делегирует функции внедренного поставщика, но проверять непосредственно функцию внедренного поставщика, потому что в примере у вас есть соответствующая логика. Или вместо того, чтобы издеваться над сервисом, чтобы добавить шпиона в функцию внедренного поставщика и проверить, была ли функция вызвана 'ожидать (injectedProvider.myFunc) .toHaveBeenCalled()' – Raulucco