这感觉就像我做的那么难。下面是一个稍微简化的函数,作为一个例子:
dateCalculator.js
const today = new Date();
const deliveryDate = new Date();
deliveryDate.setDate(today.getDate() + 3);
export const dateCalculator = () => {
return `${deliveryDate.toLocaleString('en-GB', { weekday: 'long' })}`;
};因此,这个函数获取今天的日期,添加三天,然后返回一周中的一天。我要测试一下:
dateCalculator.spec.js
import { dateCalculator } from './dateCalculator';
describe('dateCalculator', () => {
it('should return the correct day of the week', () => {
expect(dateCalculator()).toBe('Thursday');
});
});此测试通过,但只有在星期一运行时才能通过。
如何强制变量today成为我可以从测试中控制的特定日期?我想不出怎么去模仿这个单变量。
发布于 2021-07-12 10:49:34
当然,这是我做错了的事情,这确实有效:
dateCalculator.spec.js
it('should return a date in the expected format', () => {
const mockDate = new Date(1466424490000);
const spy = jest.spyOn(global, 'Date').mockImplementation(() => mockDate);
expect(dateCalculator()).toBe('Thursday');
spy.mockRestore();
});它无法工作,因为我没有在today函数中实例化dateCalculator。将所有内容放入函数体可以解决以下问题:
dateCalculator.js
export const dateCalculator = () => {
const today = new Date();
const deliveryDate = new Date();
deliveryDate.setDate(today.getDate() + 3);
return `${deliveryDate.toLocaleString('en-GB', { weekday: 'long' })}`;
};https://stackoverflow.com/questions/68345261
复制相似问题