Javascript 使用两个或多个测试进行日期模拟
我们用笑话来嘲弄。 我有一个功能,将根据时间欢迎我们 该文件如下所示:Javascript 使用两个或多个测试进行日期模拟,javascript,reactjs,mocking,jestjs,Javascript,Reactjs,Mocking,Jestjs,我们用笑话来嘲弄。 我有一个功能,将根据时间欢迎我们 该文件如下所示: export default function getGreetingMessage() { const today = new Date(); const curHr = today.getHours(); if (curHr < 12) { return 'Good morning'; } else if (curHr < 18) { return 'Good aft
export default function getGreetingMessage() {
const today = new Date();
const curHr = today.getHours();
if (curHr < 12) {
return 'Good morning';
} else if (curHr < 18) {
return 'Good afternoon';
}
return 'Good evening';
}
当我单独运行每个测试时,它运行良好。当我一次运行所有测试时,测试都失败了
我尝试重置jest函数。但不起作用
还有别的办法吗
提前感谢:)将模拟分配给全局是不好的做法,因为它无法清理:
global.Date = jest.fn(() => DATE_TO_USE);
未经修改的日期
在后续的设置
调用中将不可用:
const DATE_TO_USE = new Date(date);
没有必要为实现提供jest.fn
,它可以在每次测试中更改。由于它是预期的Date
对象,因此可以使用原始Date
创建实例:
const OriginalDate = Date;
beforeEach(() => {
jest.spyOn(global, 'Date');
});
it('', () => {
Date.mockImplementation(() => new OriginalDate('Tue Oct 16 2018 15:49:11'));
expect(getGreetingMessage()).toEqual('Good afternoon');
});
调试输出
console.log(今天)
,并确保在我运行每个测试时它都是jest mock.Ha,并为我提供模拟的测试。当我同时运行所有测试时,它给出了正常的日期date。mockReturnedValue
抛出错误。它显示Date.mockReturnedValue不是函数。这是一个输入错误。它真的有效吗?我在TypeScript中使用了上面的代码,但是类型“DateConstructor”上不存在属性“mockReturnValue”。ts(2339)@choasia该问题不涉及ts,难怪代码会导致类型问题。尝试断言一个类型,(日期为jest.Mock)。mockReturnValue(…)
@estus Aha,它现在可以工作了。非常感谢你。顺便说一下,我决定使用const dateToUse=新日期(“2018年10月16日星期二11:49:11”);jest.spyOn(全局,“日期”).mockImplementation(()=>dateToUse)代码>以避免上述类型问题。
const OriginalDate = Date;
beforeEach(() => {
jest.spyOn(global, 'Date');
});
it('', () => {
Date.mockImplementation(() => new OriginalDate('Tue Oct 16 2018 15:49:11'));
expect(getGreetingMessage()).toEqual('Good afternoon');
});