javascript - 重构一些有很多重复代码的单元测试。

标签 javascript testing timezone

我正在为我编写的函数编写一些测试:当前代码按我预期的方式工作,但现在我需要 DRY 我的代码并进行重构。 下面你会看到我写的单元测试:

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

尽管在我看来我应该能够重构 stub ,但我发现它具有挑战性,因为每个 stub 每次都有不同的返回值。我可以就如何使我的代码干净和干燥获得一些建议吗?

最佳答案

一个建议是使用偏函数。如您所知,sinon.stub 中的前两个参数对于每个单元测试都是相同的。因此,在执行单元测试之前,我们可以创建一个函数

const timezoneOffsetStub = (callback) => {
   return sinon.stub(constantDate, 'getTimezoneOffset', callback);
}

(假设 constantDate 是全局定义的变量) 所以现在要在每个单元测试中 stub ,我们只需要定义不同的回调是什么。

QUnit.test('Localized Date in Honolulu', assert => {
  const stub = timezoneOffsetStub(() => '600');
  ...
});

QUnit.test('San Francisco Date and Time', assert => {
  const stub = timezoneOffsetStub(() => '420');
  ...
});

关于javascript - 重构一些有很多重复代码的单元测试。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45316571/

相关文章:

javascript - 在 jquery 的可拖动辅助函数中实例化 React 组件

javascript - 如何在 Bootstrap 中复制 "GitHub Project Display Widget"?

xcode - Xcode XCTests 中的 @BeforeClass 和 @AfterClass

java - 如何模拟从内部 API 集成测试中调用的外部 API 的响应

C API返回指定时区的时间字符串?

php - 将 Unix 时间戳转换为时区?

java - 如何防止使用 H2 进行 JUnit-Test 的日期更改?

javascript - 用jquery改变指定位置的内容

javascript - Vuetify 按行单选数据表

rest - Golang HTTP REST 模拟