Javascript 茉莉花-我如何模仿一个最后的电话?

Javascript 茉莉花-我如何模仿一个最后的电话?,javascript,angularjs,jasmine,karma-jasmine,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, upda

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

  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没有定义

所以这个电话

updateActionList().finally(function() {
    //Do stuff
});
从其他函数返回承诺,本质上我的问题是,在updateActionList()mock之前返回承诺的函数需要另一个finally调用

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

如果您演示了一个示例,说明您的一个测试如何尝试使用
updateActionList()
@miqid它是文件中的一个本地函数,它们不直接调用它,只调用正在测试的文件。@Carson,
updateActionList
函数被注入了吗?它是否在控制器的范围内?详细说明它是如何成为“局部函数”的,以及它是如何被调用的。。需要这些详细信息..@tanmay抱歉。它没有被注入,也没有连接到范围。它位于控制器函数内,在其中声明,然后在该函数内调用,后面附加了.finally。当我运行代码时,功能按预期工作。当我测试时,它会抱怨我提供的错误。这让我觉得茉莉花的某些东西没有被恰当地嘲笑。我真的无法发布整个代码本身,但这是否澄清了问题?啊,我意识到我遗漏了谜题的一部分,我误解了
updateActionList
返回的承诺来自哪里,需要更新模拟的
finally
块,以便也有一个
finally
。我用这些细节更新了问题,并给出了答案,以防其他人遇到类似的问题。