【问题标题】:Spying on Date constructor with sinon用 sinon 监视 Date 构造函数
【发布时间】:2015-09-01 18:19:54
【问题描述】:

我有一个设置令牌到期日期的方法:

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

我想在“新日期”语句上写一个断言:

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: 预计 spy 至少被调用过一次,但它 从未被调用过

关于构造函数间谍有什么需要注意的吗?

【问题讨论】:

    标签: javascript node.js mocha.js sinon


    【解决方案1】:

    考虑到您的构造函数绑定到“全局”,这意味着如果您在浏览器上打开开发者控制台,您应该能够通过使用相关函数/构造函数来实例化对象:

    var Date = new Date();
    

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

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

    【讨论】:

    • 谢谢,但我已经描述了服务器端的一个案例,所以“全局”而不是“窗口”。请在您的答案中修复它,我会接受它。顺便说一句,我还必须存根“Date.now()”方法。
    • 不要忘记在 after() 块中调用Date.restore(),如果你将它存根而不是返回特定时间。
    猜你喜欢
    • 2013-01-25
    • 1970-01-01
    • 2015-05-13
    • 2020-08-26
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 1970-01-01
    • 2012-01-09
    相关资源
    最近更新 更多