茉莉花-我该如何模拟Final Call?

时间:2018-09-05 22:18:33

标签: javascript angularjs jasmine karma-jasmine

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

  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()从getThings()返回一个带有.then和.finally块的承诺。

我只希望finally块能够真正解决问题,以便测试可以通过。

或者我还需要做其他事情吗?我不确定为什么最后未定义。

1 个答案:

答案 0 :(得分:0)

所以这个电话...

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

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

  this.getThings = jasmine.createSpy("getThings").and.returnValue({
    then: function(cb) {
      cb(self.mockPlugins);
      return {
        finally: function(cb) {
          cb();
          return {
            finally: function(cb) {
              cb();
            }
          };
        }
      };
    }
  });