测试承诺链角

时间:2015-01-23 14:55:51

标签: javascript angularjs testing jasmine

如何在角度服务中模拟此代码中的第二个调用。

 myService.promise.then(function () {
            userConfig = userService.getUserConfiguration();
        }).then(function () {
         //do more stuff
        })

我知道我可以按如下方式模拟第一个电话:

beforeEach(inject(function ($q) {
    var deferred = $q.defer();
    spyOn(myService.promise, 'then').and.returnValue({$promise: deferred.promise});
    deferred.resolve();
}));

1 个答案:

答案 0 :(得分:0)

由于您使用第一个间谍返回deferred.promise,您可以只监视deferred.promise.then以创建第二个间谍。

编辑:对不起,我没有看到你把它包裹在一个物体中。您可以将该对象分配给变量并返回该变量。然后,您可以为您的间谍引用对象的属性,并执行spyOn(returnObject.$promise, 'then')之类的操作,假设变量名为returnObject。

beforeEach(inject(function ($q) {
    var deferred_1 = $q.defer();
    var return_1 = {$promise: deferred_1.promise};
    var deferred_2 = $q.defer();
    var return_2 = {$promise: deferred_2.promise};
    spyOn(myService.promise, 'then').and.returnValue(return_1);
    spyOn(return_1.$promise, 'then').and.returnValue(return_2);
    deferred.resolve();
}));