我刚开始使用Node,现在正在编写一些单元测试。对于前几个函数,我可以正常运行,但是现在我碰到了一个包含其中的函数moment.utc()。我的函数的简化版本如下所示:
moment.utc()
function calculate_x(positions, risk_free_interest){ let x = 0; for (let position of positions) { let expiry_in_years = get_expire_in_years(moment.utc()); if (expiry_in_years > 0){ let pos_x = tools.get_x(expiry_in_years, risk_free_interest); x += pos_x; } } return x; }
我尝试使用基本节点断言测试库进行测试:
"use strict"; const assert = require('assert'); let positions = [{this: 'is', a: 'very', large: 'object'}]; assert.strictEqual(calculate_x(positions, 1.8), 1.5);
由于执行此操作的时间(以及结果)总是不同的,因此它将始终失败。
在Python中,我可以设置模拟类和对象。有没有一种方法可以在Node中解决此问题而无需将moment.utc()作为calculate_x()函数的参数?
calculate_x()
瞬间让您改变时间来源
如果要更改Moment看到的时间,可以指定一种方法,该方法返回自Unix时代(1970年1月1日)以来的毫秒数。 默认值为: moment.now = function () { return +new Date(); } 这将在调用moment()时使用,从中省略令牌时使用的当前日期format()。通常,任何需要当前时间的方法都可以在后台使用。
如果要更改Moment看到的时间,可以指定一种方法,该方法返回自Unix时代(1970年1月1日)以来的毫秒数。
默认值为:
moment.now = function () { return +new Date(); }
这将在调用moment()时使用,从中省略令牌时使用的当前日期format()。通常,任何需要当前时间的方法都可以在后台使用。
moment()
format()
因此,您可以moment.now在代码执行时重新定义以获取自定义输出moment.utc()。
moment.now