确保 sinon 测试中的新 Date() 值与代码中的值匹配
Ensure new Date() value in sinon test matches value in code
抱歉,如果这是一个真正的基本要求,我对 sinon 比较陌生,我一直在努力寻找任何人尝试做我正在做的事情。
在我的代码中,如果没有值,我将使用 new Date() 生成一个 ISO 字符串:
const toDateTimeParameter: string = encodeURIComponent(new Date().toISOString());
在我的测试中,我还生成了一个新的 Date() 值来比较:
const toDateTime: string = encodeURIComponent(new Date().toISOString());
您可能能够看到这是怎么回事,但是由于这些 Date 实例不是在完全相同的时间生成的,因此它们不匹配(相差 1-2 毫秒)。显然很难预测确切的方差(而且我宁愿不这样做),那么有没有办法将这两个值排列起来?
失败示例:
AssertionError [ERR_ASSERTION]: Input A expected to strictly equal input B:
+ expected - actual
- 'https://example.com(fromDateTime=2019-11-01,toDateTime=2020-12-16T21%3A48%3A00.520Z)'
+ 'https://example.com(fromDateTime=2019-11-01,toDateTime=2020-12-16T21%3A48%3A00.519Z)'
+ expected - actual
Sinon 提供了一个名为 fake timers 的实用程序,可让您控制日期和时间。您可以创建一个日期并将该日期传递给 useFakeTimers
以指定该测试的 date/time 应该是什么:
afterEach(() => {
// need to restore if you want date to not be stubbed by sinon
sinon.restore();
});
it('should do something', () => {
// create a date to indicate current date/time
const now = new Date();
// pass that date to useFakeTimers
sinon.useFakeTimers(now);
const expected = toDateTime();
const actual = now.toISOString();
assert.strictEqual(actual, expected); // or whatever assertion you do
});
希望对您有所帮助!
抱歉,如果这是一个真正的基本要求,我对 sinon 比较陌生,我一直在努力寻找任何人尝试做我正在做的事情。
在我的代码中,如果没有值,我将使用 new Date() 生成一个 ISO 字符串:
const toDateTimeParameter: string = encodeURIComponent(new Date().toISOString());
在我的测试中,我还生成了一个新的 Date() 值来比较:
const toDateTime: string = encodeURIComponent(new Date().toISOString());
您可能能够看到这是怎么回事,但是由于这些 Date 实例不是在完全相同的时间生成的,因此它们不匹配(相差 1-2 毫秒)。显然很难预测确切的方差(而且我宁愿不这样做),那么有没有办法将这两个值排列起来?
失败示例:
AssertionError [ERR_ASSERTION]: Input A expected to strictly equal input B:
+ expected - actual
- 'https://example.com(fromDateTime=2019-11-01,toDateTime=2020-12-16T21%3A48%3A00.520Z)'
+ 'https://example.com(fromDateTime=2019-11-01,toDateTime=2020-12-16T21%3A48%3A00.519Z)'
+ expected - actual
Sinon 提供了一个名为 fake timers 的实用程序,可让您控制日期和时间。您可以创建一个日期并将该日期传递给 useFakeTimers
以指定该测试的 date/time 应该是什么:
afterEach(() => {
// need to restore if you want date to not be stubbed by sinon
sinon.restore();
});
it('should do something', () => {
// create a date to indicate current date/time
const now = new Date();
// pass that date to useFakeTimers
sinon.useFakeTimers(now);
const expected = toDateTime();
const actual = now.toISOString();
assert.strictEqual(actual, expected); // or whatever assertion you do
});
希望对您有所帮助!