gpt4 book ai didi

node.js - 在从 Node 模块导出的函数上使用 `jest.spyOn`

转载 作者:行者123 更新时间:2023-12-04 13:40:41 25 4
gpt4 key购买 nike

Jest , 要监视(并可选地模拟实现)一个方法,我们执行以下操作:

const childProcess = require('child_process');
const spySpawnSync = jest.spyOn(childProcess, 'spawnSync').mockImplementation();

这允许我们使用 spySpawnSync检查上次调用它的参数,如下所示:

expect(spySpawnSync).lastCalledWith('ls');

但是,这对于导出函数的 Node 模块是不可能的,例如 execa包裹。

我尝试了以下每一个,但没有一个 spy 或 mock 该功能:

// Error: `Cannot spy the undefined property because it is not a function; undefined given instead`
jest.spyOn(execa);

// Error: `Cannot spyOn on a primitive value; string given`
jest.spyOn('execa');

// Error: If using `global.execa = require('execa')`, then does nothing. Otherwise, `Cannot spy the execa property because it is not a function; undefined given instead`.
jest.spyOn(global, 'execa');

因此,有没有办法窥探导出函数的模块,例如 execa在给定的例子中?

最佳答案

我们可以尝试在测试开始时模拟模块,比如在 describe 之前。块,如下所示:

jest.mock('execa’, () => ({
Method1: jest.fn(),
Method2: jest.fn().mockReturnValue(…some mock value to be returned)
}));

这里 Method1Method2是一些您想要模拟和测试的 execa 方法,或者您是否正在使用它们。

否则,你可以像下面这样模拟它应该可以工作:
jest.mock('execa');

关于node.js - 在从 Node 模块导出的函数上使用 `jest.spyOn`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57619182/

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