【问题标题】:Jest unit test fails but it shouldnt开玩笑单元测试失败,但它不应该
【发布时间】:2022-01-15 15:08:32
【问题描述】:

我有这个返回布尔值的方法。它可以正常工作,但在单元测试中它失败了。 该方法如下所示:

 const isRushHour = (date: string): boolean => {
  let isRushHour: boolean = false;
  let isFriday: boolean = new Date(date).getDay() === 5;
  let selectedTime: string = new Date(date).toLocaleTimeString(
    navigator.language,
    {
      hour: "2-digit",
      minute: "2-digit",
    }
  );

  let isRushHourRange: boolean =
    selectedTime >= "15:00" &&
    selectedTime <= "19:00" ;

  if (isFriday && isRushHourRange) {
    isRushHour = true;
  }

  return isRushHour;
};

它基本上检查日期是否是星期五以及它是否在时间范围之间。但是,使用控制台 f.ex 进行检查时一切正常;

console.log(isRushHour("2022-01-07T19:00"))

这将返回true,应该是这样的!

但开玩笑的是,我尝试使用.toBe(true) , .toBeTruthy() , and to toEqual(true)

    expect(calculator.isRushHour("2022-01-07T19:00")).toBe(true);

完全相同的字符串。

但测试失败并显示消息:

   expect(received).toBe(expected) // Object.is equality

    Expected: true
    Received: false

【问题讨论】:

  • isRushHour 的返回值将根据navigator.language 返回的内容而有所不同。它会给你带来什么?
  • navigator.language returns = en-Gb isRushHourRange 返回 = true
  • navigator.language 在您的测试中返回 en-GB 吗?
  • 非常感谢!这就是问题所在。是我们。

标签: javascript reactjs typescript jestjs


【解决方案1】:

这解决了问题:

   beforeEach(() => {
  jest.spyOn(window.navigator, "language", "get");
});

【讨论】:

  • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2021-08-27
  • 2018-02-13
  • 2017-11-19
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 2020-10-08
  • 2017-08-11
  • 2021-12-10
相关资源
最近更新 更多