epoch的值是提前设置的,并且函数有一个闭包,因为我不想重新生成epoch的值。
/* index.js */
const epoch = Date.now()
function appVersion() {
console.log(epoch)
}
export { appVersion }我遇到的问题是,无论我如何模拟测试文件中的全局Date对象,这个对象都会返回未模拟的值,因为导入是首先执行的。
如何在测试文件中模拟Date.now()?
我现在使用的替代方法是在一个单独的文件中使用Date.now(),然后对导入的文件执行jest.mock
/* epoch.js */
const epoch = Date.now()
export = { epoch }/* index.test.js */
import { appVersion } from './app-version'
jest.mock('./epoch', () => ({
epoch: '11111111'
})发布于 2020-03-07 11:28:02
处理日期和其他不确定性值(例如Math.random())的常见模式是将它们作为参数传递,并为它们提供默认值。
const defaultEpoch = Date.now();
function appVersion(epoch = defaultEpoch) {
console.log(epoch)
}
export { appVersion }通过这种方式,代码可以按预期工作,但您现在可以在测试时传入特定值,以使其具有确定性:
import { appVersion } from './app-version'
it('uses epoch value for appVersion', () => {
const mockEpoch = '11111111';
const version = appVersion(mockEpoch);
expect(version).toBe('11111111');
};https://stackoverflow.com/questions/60574071
复制相似问题