javascript - 测试 promise 链 Angular

标签 javascript angularjs testing jasmine

如何在 Angular 服务的这段代码中模拟对 then 的第二次调用。

 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();
}));

最佳答案

由于您要使用第一个 spy 返回 deferred.promise,因此您只需监视 deferred.promise.then 即可创建第二个 spy 。

编辑:抱歉,我没有看到您将它包裹在一个对象中。您可以将该对象分配给一个变量并返回它。然后您可以为您的 spy 引用该对象的属性并执行类似 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();
}));

关于javascript - 测试 promise 链 Angular ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28112560/

相关文章:

angularjs - 过滤后从列表中删除项目

angularjs - 如何在单击按钮时在 ng-Repeat 内移动对象?

java - @Test方法不等待selenium代码完成其执行

javascript - 使 JS 切换 div 在打开另一个 div 时关闭,并在单击时更改图像

javascript - 我怎样才能使这个 javascript 更易于阅读、维护和从 OO 背景理解?

javascript - 我可以通过 Ajax (jquery) 读取它吗?

javascript - 如何使用 chai.js 断言数组交集?

javascript - 如何在循环异步函数后访问值

angularjs - 更改值时为SVG路径设置动画

android - 使用 Appium 自动化 Android 上的移动浏览器