Jasmine - 我如何模拟最终的通话?

问题描述 投票:0回答:1

我有一个测试,创建一个像这样的控制器......

  this.createScope = function(scope) {
    if (scope) {
      this.scope = scope;
    } else {
      this.scope = $rootScope.$new();
    }
    this.controller = $controller("menuController", {
      "$scope": this.scope,
      updateActionList: function() {
        return {
          finally: function() {}
        };
      }
    });
  };

我添加了这部分......

      updateActionList: function() {
        return {
          finally: function() {}
        };
      }

因为当我运行我的测试时,所有这些都失败了,因为....

TypeError: undefined is not an object (evaluating 'updateActionList().finally')

updateActionList()是一个本地函数,在这样的实际代码中调用...

updateActionList().finally(function() {
    //Do stuff
});

updateActionList()使用.then和.finally块从getThings()返回一个promise。

我只是希望finally块能够自行解决,所以测试可以通过。

或者还有其他一些我需要做的事情吗?我不确定为什么最终未定义。

javascript angularjs jasmine karma-jasmine
1个回答
0
投票

所以这个电话......

updateActionList().finally(function() {
    //Do stuff
});

从其他函数返回一个promise,本质上我的问题是在updateActionList()mock之前返回promise的函数需要另一个finally调用。

  this.getThings = jasmine.createSpy("getThings").and.returnValue({
    then: function(cb) {
      cb(self.mockPlugins);
      return {
        finally: function(cb) {
          cb();
          return {
            finally: function(cb) {
              cb();
            }
          };
        }
      };
    }
  });
© www.soinside.com 2019 - 2024. All rights reserved.