javascript - 在 Jest/RTL 中模拟单个变量
问题描述
这感觉远没有我做的那么困难。这是一个小(高度简化)的功能作为示例:
日期计算器.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,我将对其进行测试:
日期计算器.spec.js
import { dateCalculator } from './dateCalculator';
describe('dateCalculator', () => {
it('should return the correct day of the week', () => {
expect(dateCalculator()).toBe('Thursday');
});
});
此测试通过,但只有在星期一运行时才会通过。
如何强制变量today
成为我可以从测试中控制的特定日期?我不知道如何模拟这个单一变量。
解决方案
当然,这是我做错的事情。这确实有效:
日期计算器.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
函数中实例化。将所有内容放入函数体中可以解决此问题:
日期计算器.js
export const dateCalculator = () => {
const today = new Date();
const deliveryDate = new Date();
deliveryDate.setDate(today.getDate() + 3);
return `${deliveryDate.toLocaleString('en-GB', { weekday: 'long' })}`;
};
推荐阅读
- javascript - jQuery Datatable 按钮展开/折叠所有
- android - 如何将 ML Vision OCR 结果结构化为表格格式?
- redis - 将密钥存储在 redis 集中
- php - 使用php将上传的excel文件转换为csv
- php - 从 Route::get 找不到我的 Mailable 类
- python - 使用 sns 绘制一个类似于 created v/s resolved 的 JIRA
- javascript - `useEffect` 函数中 `useState` 函数的工作
- r - 如何对 2 个栅格的像素值求和
- css - 选择框中的样式箭头
- python - Pyspark:访问 UDF 中行内的列