我正在尝试模拟moment.js
以便预测我的集成测试。
我一直在尝试像this那样嘲笑jest
:
import moment from 'moment'
...
jest.mock('moment', () => () => ({valueOf: () => 100})
但是当我运行测试时,源代码使用常规的moment
。
我已经通过执行this成功地替代了moment
的行为,但这还不够好,因为它覆盖了我不想更改的更多功能。
答案 0 :(得分:0)
当我必须模拟moment.js
函数时,可以使用stubs
(https://sinonjs.org/releases/v7.2.7/stubs/)中的Sinon.js
来实现。
基本上是这样的:
import * as sinon from 'sinon'
import moment from 'moment'
...
const stubValueOf = sinon.stub(moment, 'valueOf');
stubValueOf.returns(100);
重要:使用存根的一种好的做法是仅将其用于特定测试,而不是整个测试文件。因此,每次使用后,请使用stubValueOf.restore()
。如果要在同一测试中将具有不同值的方法“存根”,请使用stubValueOf.reset()
。