Jasmine spyOn函数调用内部函数测试

时间:2017-02-16 16:06:51

标签: jasmine

我正在尝试使用Jasmine来测试以下功能:

var Pdba = Class.create();
Pdba.prototype = {
      getChangeGroup: function(userId) {
      var query = 'active=true^u_change_group=true^u_organization=false^';
      var exGroup = new CompanyGroup();
      var groups = exGroup.getGroupsByQuery(userId, query); //want to spy/mock this call
      if (groups.next()) {
         return groups.sys_id.toString();
      }

      return '';
   }
type: 'Pdba'
};

我希望SpyOn getGroupsByQuery()调用,以便它不会进行实际调用。以下是我一直在尝试的各种事情的集合,主要是为了看我是否可以"间谍"并看到它已被调用,然后处理覆盖,以便我可以用我自己的数据替换调用。

describe('my suite of getChangeGroup tests', function() {
    var expPdba;
    var validUserId = 'user1';
    var expGrp;
    var ggbqMoc 

    beforeEach(function() {
        expPdba = new global.Pdba();
        coGrp = new CompanyGroup();
        spyOn(coGrp, 'getGroupsByQuery');
        ggbqMoc = jasmine.createSpy('getGroupsByQuery');
    });

    it('should return \'\' for empty userId', function() {
        coPdba.getChangeGroup('');

        expect(coGrp.getGroupsByQuery).toHaveBeenCalled();
        expect(ggbqMoc).toHaveBeenCalled();
    });
});

这是可能的还是我需要更改测试中的功能才能获得' CompanyGroup'作为参数?

谢谢

1 个答案:

答案 0 :(得分:0)

我假设您正在使用茉莉v3。现在,创建间谍的语法很奇怪-您必须传递一个字符串,该字符串引用您要为其创建间谍的变量的名称,然后传递一个应该被侦听的函数名称数组。

尝试一下:

describe('my suite of getChangeGroup tests', function() {
    var expPdba;
    var validUserId = 'user1';
    var expGrp;
    var spy; 

    beforeEach(function() {
        expPdba = new global.Pdba();
        coGrp = new CompanyGroup();
        spy = jasmine.createSpyObj('coGrp', ['getGroupsByQuery'])
    });

    it('should return \'\' for empty userId', function() {
        coPdba.getChangeGroup('');

        expect(coGrp.getGroupsByQuery).toHaveBeenCalled();
        expect(spy).toHaveBeenCalled();
    });
});