重构一些具有大量重复代码的单元测试。

时间:2017-07-26 02:46:46

标签: javascript testing timezone

我正在为我编写的函数编写一些测试:当前代码按照我的预期工作,但现在我需要干掉我的代码并重构。 下面你将看到我写的单元测试:



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();
});




虽然在我看来,我应该能够重构存根,因为每次存根都有不同的返回值。我可以请一些关于如何使我的代码清洁和干燥的建议。

1 个答案:

答案 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');
  ...
});