【发布时间】:2016-04-04 13:59:43
【问题描述】:
我的问题与this post 非常相似,但只是不同,以至于接受的答案对我不起作用。本质上,我有一个使用 $compile 的 Angular 工厂,它返回一个承诺,我想在 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);
});
});
});
这段代码向我抱怨 $compile 没有返回承诺。 $provide 似乎不知道注入的新函数分配。我一直在研究它,但我是 Jasmine 的新手,所以我真的不知道我在做什么。任何帮助将不胜感激 - 如果有更简单的方法来做我想做的事情,请告诉我!
【问题讨论】:
标签: javascript angularjs jasmine