测试不在服务

时间:2017-10-05 21:48:25

标签: javascript angularjs asynchronous karma-jasmine

如果我有一个从作用域中获取函数的指令,并且该函数是异步的,我该怎么测试呢?例如

angular.module('myApp').factory('AsyncService',() => {
    return {
        async: // function that returns a promise
    }
})

angular.module('myApp').directive('asyncDirective', () => ({
    scope: { async: = },
    link: scope => {
        scope.async.then(//do something)
    }
}));

angular.module('myApp').controller('ctrl', ($scope, AsyncService) => {
    $scope.asyncService = AysncService;
});

<async-directive async="asyncService.async" />

上面的代码是如何使用该指令的一个例子,但我只想单独测试该指令。由于该指令需要一个函数而不是它可以用来调用函数的对象,我该如何测试它?如果我使用间谍,我会窥探什么?

1 个答案:

答案 0 :(得分:1)

该服务应该是存根的:

beforeEach(() => {
  module('myApp', { AsyncService: { async: jasmine.createSpy() } });
})

然后可以模拟该方法在指令编译之前返回一个promise:

AsyncService.async.and.returnValue($q.resolve(...));