gpt4 book ai didi

javascript - Jest.fn - 使用 jest.mock 时返回值返回未定义

转载 作者:行者123 更新时间:2023-12-01 17:33:57 28 4
gpt4 key购买 nike

我有以下文件,我正在尝试为其编写单元测试:

import { document } from '../../globals';
const Overlay = () => {
console.log(document.getElementsByTagName()); // this outputs 'undefined'
};

我正在努力模拟 getElementsByTagName功能。我的测试看起来像这样。
import { document } from '../../globals';
jest.mock('../../globals', () => ({
document: {
getElementsByTagName: jest.fn().mockReturnValue('foo')
}
}));
console.log(document.getElementsByTagName()); // this outputs 'foo'

但不幸的是, console.log在顶部文件中总是输出 undefined .它可以看到文档对象和 getElementsByTagName模拟,但返回值始终为 undefined .

如果我 console.log(document.getElementsByTagName)我得到以下信息:
{ getElementsByTagName:
{ [Function: mockConstructor]
_isMockFunction: true,
getMockImplementation: [Function],
mock: [Getter/Setter],
mockClear: [Function],
mockReset: [Function],
mockReturnValueOnce: [Function],
mockReturnValue: [Function],
mockImplementationOnce: [Function],
mockImplementation: [Function],
mockReturnThis: [Function],
mockRestore: [Function] },
}

但是如果我在另一个文件中做同样的事情,我会得到这个:
function () {
return fn.apply(this, arguments);
}

我的怀疑是 jest.mock正在包装 jest.fn模拟另一个功能..有什么想法吗?

最佳答案

尝试使用 .mockReturnValue()分配后
我遇到了同样的行为,并通过调用 mockFn.mockReturnValue(value) 找到了成功分配后。
例如:

import { document } from '../../globals.js'

jest.mock('../../globals.js', () => ({
document: {
getElementsByTagName: jest.fn()
}
}))

document.getElementsByTagName.mockReturnValue('foo')

console.log(document.getElementsByTagName()); // this outputs 'foo'
我在 jest 文档中看到了这两种模式。
  • 见: mockFn.mockReturnValue(value) 显示分配后调用的位置。
  • 见: jest.requireActual(moduleName) 显示分配期间调用的位置。

  • 我想知道后一种情况是否需要其他一些交互模式来断言模拟的返回值,但我还没有弄清楚。我似乎无法使用 spyOn 复制成功图案 suggested in another answer here .

    关于javascript - Jest.fn - 使用 jest.mock 时返回值返回未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46431638/

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