Моя проблема очень похожа на this post, но достаточно просто, чтобы принятый ответ не сработал для меня. По сути, у меня есть Угловая фабрика, которая использует компиляцию $, которая возвращает обещание, и я хочу издеваться над ним в Жасмине. Вот упрощенная версия завода:Как насмехаться с функцией компиляции при тестировании фабрики с помощью Jasmine
angular.module('app.common')
.factory('myFactory', myFactory);
myFactory.$inject = ['$compile', '$rootScope'];
function myFactory($compile, $rootScope) {
var factory = {
testFunc: testFunc
}
return factory;
function testFunc(stuff) {
angular.element(document.body).append($compile(stuff)($rootScope));
}
}
А вот мой тест:
describe("Common", function() {
// I have many common services
beforeEach(function() {
angular.mock.module('app.common');
});
describe("Factory Example: ", function() {
var mockCompile, mockRoot, aFactory;
beforeEach(function() {
module(function($provide) {
$provide.value('$compile', jasmine.createSpy('$compile'));
$provide.value('$rootScope', jasmine.createSpy('$rootScope'));
});
});
beforeEach(inject(function($compile, $rootScope, myFactory, $q) {
mockCompile = $compile;
mockCompile = function() {
var deferred = $q.defer();
deferred.resolve('remote call result');
return deferred.promise;
};
mockRoot = $rootScope;
aFactory = myFactory;
}));
it('should work', function() {
aFactory.testFunc('stuff');
expect(true).toBe(true);
});
});
});
Этот код жалуется на меня, что $ компиляции не возвращает обещание. Похоже, что $ provision не знает о назначении новой функции из инъекции. Я взломал его, но я новый для Жасмина, поэтому я не знаю, что я делаю. Любая помощь будет оценена - и если есть более простой способ сделать то, что я пытаюсь сделать, пожалуйста, дайте мне знать!