首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Jest/RTL中模拟单个变量

在Jest/RTL中模拟单个变量
EN

Stack Overflow用户
提问于 2021-07-12 09:49:53
回答 1查看 235关注 0票数 0

这感觉就像我做的那么难。下面是一个稍微简化的函数,作为一个例子:

dateCalculator.js

代码语言:javascript
复制
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

代码语言:javascript
复制
import { dateCalculator } from './dateCalculator';

describe('dateCalculator', () => {
  it('should return the correct day of the week', () => {
    expect(dateCalculator()).toBe('Thursday');
  });
});

此测试通过,但只有在星期一运行时才能通过。

如何强制变量today成为我可以从测试中控制的特定日期?我想不出怎么去模仿这个单变量。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-12 10:49:34

当然,这是我做错了的事情,这确实有效:

dateCalculator.spec.js

代码语言:javascript
复制
  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

代码语言:javascript
复制
export const dateCalculator = () => {
  const today = new Date();
  const deliveryDate = new Date();

  deliveryDate.setDate(today.getDate() + 3);

  return `${deliveryDate.toLocaleString('en-GB', { weekday: 'long' })}`;
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68345261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档