如何监视注入服务的方法?

时间:2016-05-13 07:28:20

标签: javascript unit-testing jasmine

我有以下JavaScript功能(注意这是不是使用Angular),它接受服务并在其中使用它来进行调用:

function MyFunction(service) {
   var my = {};

   my.getData = function () {
      var data = service.getDataFromHttpService();
      //some other processing...
      return data;
   }

   return my;
};

该服务如下所示:

var TheDataService = (function() {
   var my = {};

   my.getDataFromHttpService = function () {
        //Call some HTTP service and get data to return...
        return data; 
   }
   return my;

}());

调用代码如下所示:

var mf = new MyFuntion(TheDataService);
var result = mf.getData();

我正在尝试在jasmine中创建一个简单的单元测试来监视传入MyFunction的服务并查看是否已调用getDataFromHttpService()

it("should call spyOn TheDataService and ensure getDataFromHttpService is called", function() {

      var spySrv = spyOn(TheDataService, "getDataFromHttpService");
      var mf = new MyFuntion(spySrv);

      var result = mf.getData();

      expect(TheDataService.getDataFromHttpService).toHaveBeenCalled();

   });

我得到的错误如下:

  

TypeError:service.getDataFromHttpService不是函数

我尝试了一些变化但没有任何效果。实际代码在单元测试之外工作。服务提取数据,一切都很好。此外,如果我直接在TheDataService上直接测试和间谍,而不是通过MyFunction,测试也会通过。但是,我需要测试传递给构造函数的服务,并确定它是否已通过间谍调用。我做错了什么?

0 个答案:

没有答案