用sinon监视Date构造函数

Spying on Date constructor with sinon

本文关键字:构造函数 Date 监视 sinon      更新时间:2023-09-26

我有一个方法可以设置令牌的过期日期:

var jwt = require('jwt-simple');
module.exports = {  
    setExpirationDate: function(numDays) {
        var dateObj = new Date();
        console.log(dateObj);
    }
}

我想写一个assert on "new Date"语句:

var jwtHelper = require('../../../helpers/jwtToken');
describe('setExpirationDate method', function() {
    it('should create date object', function() {
        var Date = sinon.spy(Date);
        jwtHelper.setExpirationDate(global.TOKEN_EXPIRE_DAYS);
        expect(Date).to.be.called;
    });
});

测试失败:

AssertionError:预期的间谍已经被调用了至少一次,但它从未调用

是否有一些关于构造函数间谍应该关注的事情?

考虑到你的构造函数被绑定为'global',这意味着如果你在浏览器上打开开发者控制台,你应该能够通过使用相关的函数/构造函数来实例化一个对象:

var Date = new Date();

如果是这样,实际的工作代码可以是:

var Date = sinon.spy(global, 'Date');
expect(Date.called).to.be.equal(true);