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

时间:2016-06-27 16:26:09

标签: javascript angularjs testing jasmine factory

我有这样的工厂

angular.module('app')
.factory('Utils', function () {
   function one() {
   }

   function two() {
     one();
   }

   return {
     one: one,
     two: two
 });
});

在茉莉花规格中,我试图做这样的事情:

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

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

2 个答案:

答案 0 :(得分:1)

您需要通过callThrough()跟踪所有来电:

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

答案 1 :(得分:0)

我可以通过调整工厂来实现它的工作:

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

function one() {
}

function two() {
 utils.one();
}

utils = {
 one: one,
 two: two
}

return utils;
});