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'
})
处理日期和其他不确定性值(例如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');
};