Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Jest-在typescript中模拟命名类导出_Javascript_Node.js_Typescript_Unit Testing_Jestjs - Fatal编程技术网

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移动到文件的顶部。请看我编辑的答案。让我知道它是否有效。