我正在为我编写的函数编写一些测试:当前代码按照我的预期工作,但现在我需要干掉我的代码并重构。 下面你将看到我写的单元测试:
QUnit.test('Localized Date in Honolulu', assert => {
const stub = sinon.stub(constantDate, 'getTimezoneOffset', () => {
return '600';
});
console.log('timeSet', timeSet());
assert.strictEqual(timeSet(), '2017-07-29T14:00:00.000Z', 'there needs to be a message here');
stub.restore();
});
QUnit.test('San Francisco Date and Time', assert => {
const stub = sinon.stub(constantDate, 'getTimezoneOffset', () => {
return '420';
});
assert.strictEqual(timeSet(), '2017-07-29T17:00:00.000Z');
stub.restore();
});
QUnit.test('Sydney time', assert => {
const stub = sinon.stub(constantDate, 'getTimezoneOffset', () => {
return '-600';
});
assert.strictEqual(timeSet(), '2017-07-30T10:00:00.000Z', 'Expected the time in Sydney to be 10AM');
stub.restore();
});

虽然在我看来,我应该能够重构存根,因为每次存根都有不同的返回值。我可以请一些关于如何使我的代码清洁和干燥的建议。
答案 0 :(得分:1)
一个建议是使用部分功能。如您所知,sinon.stub
中的前两个参数对于每个单元测试都是相同的。因此,在单元测试执行之前,我们可以创建一个函数
const timezoneOffsetStub = (callback) => {
return sinon.stub(constantDate, 'getTimezoneOffset', callback);
}
(假设constantDate
是全局定义的变量)
所以现在要在每个单元测试中存根,我们只需要定义不同的回调是什么。
QUnit.test('Localized Date in Honolulu', assert => {
const stub = timezoneOffsetStub(() => '600');
...
});
QUnit.test('San Francisco Date and Time', assert => {
const stub = timezoneOffsetStub(() => '420');
...
});