使用Jasmine模拟依赖模块

时间:2017-09-12 16:25:45

标签: javascript jasmine jasmine-jquery

我有一个不使用Angular / Backbone的Javascript模块化应用程序。 我正在尝试为我的启动模块编写测试用例但面临问题。

Startup.js:

    window.claimStartup = function (options) {
    this.options = $.extend({}, this.options, options);
    this.cmds = new this.serviceModule(this);
    }

     getClaimsCategories: function (claimTypeCode) {
        var self = this;
        // Refresh claim categories
        return $.when(self.cmds.getClaimsCategories(claimTypeCode))
            .then(function (response) {
                return response;
            });
    }, 

Service.js:

    claimStartup.prototype.serviceModule = function (cfg) {   
    this.cfg = cfg;
    this.init();
    }

StartUp.spec.js:

var claimStartUp;

beforeEach(function () {
spyOn(window.claimStartup.prototype, 'serviceModule');
  claimStartUp = new window.claimStartup();

});

it("should be able to get categories", function () {
jasmine.spyOn(claimStartUp.cmds, 'getClaimsCategories').andReturn('XYZ');
var categories=  claimStartup.getClaimsCategories('ABC');
expect(categories).toEqual('XYZ');
});

我在填充this.cmds时遇到错误,它说serviceModule构造函数没有定义,实际上我需要在初始化claimStartup时模拟serviceModule。

请告诉我如何在这种情况下编写测试用例。

1 个答案:

答案 0 :(得分:0)

我能解决这个问题,这可能对其他人有用。

      var claimStartUp;

      beforeEach(function () {
      var spyService = jasmine.createSpy('serviceModule');
      var methodService = window.claimStartup.prototype.serviceModule;
      window.claimStartup.prototype.serviceModule = spyService;

      var spyUI = jasmine.createSpy('uiModule');
      var methodUI = window.claimStartup.prototype.uiModule;
      window.claimStartup.prototype.uiModule = spyUI;

      claimStartUp = new window.claimStartup();

  });