这感觉不像我做的那么难。这里以一个小(高度简化)函数为例:
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' })}`;
};
所以这个函数获取今天的日期,加上三天,然后返回星期几。 Obvs,我要测试一下:
dateCalculator.spec.js
import { dateCalculator } from './dateCalculator';
describe('dateCalculator', () => {
it('should return the correct day of the week', () => {
expect(dateCalculator()).toBe('Thursday');
});
});
此测试通过,但只有在星期一运行时才会通过。
如何强制变量 today
成为我可以通过测试控制的特定日期?我不知道如何模拟这个单一变量。
答案 0 :(得分:1)
当然,这是我做错的事情;这确实有效:
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' })}`;
};