Javascript Jest-在typescript中模拟命名类导出
我有一个节点模块,它导出几个类,其中一个类是Javascript Jest-在typescript中模拟命名类导出,javascript,node.js,typescript,unit-testing,jestjs,Javascript,Node.js,Typescript,Unit Testing,Jestjs,我有一个节点模块,它导出几个类,其中一个类是Client,我用它来创建一个客户端(有几个api作为方法) 我正在尝试使用Jest测试我的模块,该模块使用此节点模块作为依赖项。但是,我无法成功模拟客户端类中的one方法(比如search()) 这是我的myModule规范: //index.spec.ts 从“nock”导入*作为nock; 从“节点模块名称”导入*作为外部模块; 从“/../../src/myModule”导入{createClient}; 描述(()=>{ 以前(()=>{
Client
,我用它来创建一个客户端(有几个api作为方法)
我正在尝试使用Jest测试我的模块,该模块使用此节点模块作为依赖项。但是,我无法成功模拟客户端类中的one方法(比如search()
)
这是我的myModule
规范:
//index.spec.ts
从“nock”导入*作为nock;
从“节点模块名称”导入*作为外部模块;
从“/../../src/myModule”导入{createClient};
描述(()=>{
以前(()=>{
nock.disableNetConnect();
});
它('在我的模块中测试搜索方法',()=>{
jest.mock('node-module-name');
const mockedClient=externalModule.Client;
const myClient=createClient({/*params*/});//通过执行Client()构造函数返回节点模块中存在的客户端类的实例
myClient.searchByName('abc');//调用搜索API-我需要跟踪对此API的调用
expect(mockedClient).toHaveBeenCalled();
expect(mockedClient.prototype.search).toHaveBeenCalledWith('abc');
});
});代码>模拟整个模块
尝试将jest.mock
移动到文件的顶部
//index.spec.ts
const search = jest.fn();
jest.mock('node-module-name', () => ({
Client: jest.fn(() => ({ search }))
}));
import * as nock from 'nock';
import * as externalModule from 'node-module-name';
import { createClient } from './../../src/myModule';
describe(() => {
beforeAll(() => {
nock.disableNetConnect();
});
it('test search method in my module', () => {
const myClient = createClient({/*params*/});
myClient.searchByName('abc');
expect(externalModule.Client).toHaveBeenCalled();
expect(search).toHaveBeenCalledWith('abc');
externalModule.Client.mockClear();
search.mockClear();
});
});
仅模拟客户端
创建search
常量并跟踪它
const search = jest.fn();
externalModule.Client = jest.fn(() => ({ search }));
const client = myModule.createClient(/*params*/);
client.searchByName('abc');
expect(externalModule.Client).toHaveBeenCalled();
expect(search).toHaveBeenCalled();
谢谢你。这对我有用。那么,使用jest.mock('node-module-name')
就没有办法做到这一点了吗?如果我在myModule
中使用该类的许多(甚至是嵌套的)函数会怎么样?我应该为这些嵌套函数中的每一个进行持续模拟,还是有一种简单的方法?有一种方法。尝试将jest.mock移动到文件的顶部。请看我编辑的答案。让我知道它是否有效。