不能模拟调用另一个工厂方法的工厂方法

Can't mock a factory method that calls another factory method

本文关键字:工厂 方法 另一个 模拟 调用 不能      更新时间:2023-09-26

我有一个这样的工厂

angular.module('app')
.factory('Utils', function () {
   function one() {
   }
   function two() {
     one();
   }
   return {
     one: one,
     two: two
 });
});

在jasmine规范中,我尝试这样做:

it('should verify', inject(function(Utils) {
  spyOn(Utils, 'one');
  Utils.two();
  expect(Utils.one).toHaveBeenCalled();
}));

然而,我得到一个错误,说间谍从未被调用。我猜这是某种参考问题。知道为什么我不能发现一个工厂函数是从同一工厂的另一个函数调用吗?

您需要通过callThrough()跟踪所有呼叫:

spyOn(Utils, 'one').and.callThrough();

我能够通过调整工厂来使其工作:

angular.module('app').factory('Utils', function () {
var utils = {};
function one() {
}
function two() {
 utils.one();
}
utils = {
 one: one,
 two: two
}
return utils;
});