如何避免与玩笑的时间耦合?

问题描述 投票:1回答:1

请考虑以下示例:

// saveThings.js
import * as services from './services';

export default (a, b) => {
  return {
    aSaved: services.save(a),
    bSaved: services.save(b)
  };
};

和测试:

// test.js
import * as services from './services';
import saveThings from './saveThings';

jest.mock('./services');

test('saves things', () => {
  services.save.mockReturnValueOnce(true)
  services.save.mockReturnValueOnce(false)
  const result = saveThings(1, 2)
  expect(result).toEqual({aSaved: true, bSaved: false})
  expect(services.save).toHaveBeenCalledWith(1)
  expect(services.save).toHaveBeenCalledWith(2)
});

这完成了工作,它验证了我期望的值并进行了正确的服务调用。

但是,它遭受了悲剧性的缺陷。我不小心在代码和测试之间引入了时间依赖性。该测试要求代码调用以特定顺序保存在ab上。但是,如您所见,这并不重要。如果顺序更改,该功能仍可按预期运行,但测试会中断。

这是一个超规格,会导致脆弱,这是测试随时间推移而腐烂的主要原因。

有没有办法用Jest处理这个问题?使用sinon可以在定义期望时指定参数。有没有办法在Jest中做类似的事情?

javascript jestjs
1个回答
0
投票

我找到了答案。为此创建了jest-when。 API就像:

jest-when
© www.soinside.com 2019 - 2024. All rights reserved.