gpt4 book ai didi

javascript - 如何用 Jest 来模拟模块的某些部分?

转载 作者:行者123 更新时间:2023-12-03 13:36:14 26 4
gpt4 key购买 nike

我已经围绕 moment.js 构建了一个日历,现在正在进行单元测试。

我解决的第一个问题是测试运行时日期将如何变化,因此我能够使用this guidance锁定时刻。 。

目前,我遇到了一个错误:

"TypeError: Cannot read property 'weekdaysShort' of undefined"

我的代码有一行:const dateHeaders = moment.weekdaysShort();

通过实现模拟的 moment().format(),我基本上失去了库的其余部分。

我直接的问题是如何设置 Jest ,让我返回从 moment.weekdaysShort();

获得的数组

我更大的问题是我是否走错了路,应该采取另一种策略。

我尝试过但结果不成功的事情

  1. 手动添加weekdayShort函数:
const mockMoment = function() {
return {format: '2016–12–09T12:34:56+00:00'}
};

mockMoment['weekdaysShort'] = () => ['Sun', 'Mon', 'Tues']; // etc etc etc

jest.mock('moment', () => mockMoment);
  • __mocks__ 文件夹中组装手动模拟。我并没有在这条路上走得太远,因为我开始觉得我必须将整个 Moment.js 库复制/粘贴到模拟中。虽然弄清楚他们是如何做他们所做的事情会很酷,但这是另一天的项目。
  • jest.spyOn - 不起作用,因为我没有监视模块。
  • 此时,我正在考虑放弃通过 props 传入的数组的 Moment 函数。虽然我有信心这会让我克服这个问题,但感觉之后我很快就会遇到另一个障碍。

    预先感谢您的帮助。

    最佳答案

    刚刚发现我常用的模式在 2016 github thread 中提供。而且,老实说,这可能就是我找到它的地方,尽管我不记得了:)

    jest.mock('moment', () => 
    const original = jest.requireActual('moment');
    return {
    __esModule: true,
    default: {
    ...original,
    ...just the parts you want to mock
    }
    }
    );

    关于javascript - 如何用 Jest 来模拟模块的某些部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59272534/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com