Reactjs 无法使用JEST(带Typescript)和React环境模拟节点模块

Reactjs 无法使用JEST(带Typescript)和React环境模拟节点模块,reactjs,typescript,mocking,jestjs,ts-jest,Reactjs,Typescript,Mocking,Jestjs,Ts Jest,我制作了一个反应钩子库,可以在NPM上使用 对于这个库的单元测试,我使用JEST和Typescript 它与另一个节点模块@brand/dependencyModule有依赖关系 这个@brand/dependencModule正在执行http请求并从“events”发出我需要模拟的事件(带有{EventEmitter}) 我试着按照这个库的todo手动模拟 首先,让我向您展示我的尝试: 在项目根级别创建\uuuuuu mocks\uuuuu文件夹(与节点模块的级别相同) 在\uuuu mock

我制作了一个反应钩子库,可以在NPM上使用

对于这个库的单元测试,我使用JEST和Typescript

它与另一个节点模块
@brand/dependencyModule
有依赖关系

这个
@brand/dependencModule
正在执行http请求并从“events”发出我需要模拟的事件(带有
{EventEmitter})

我试着按照这个库的todo手动模拟

首先,让我向您展示我的尝试:

  • 在项目根级别创建
    \uuuuuu mocks\uuuuu
    文件夹(与
    节点模块的级别相同)
  • \uuuu mocks\uuuu
  • @brand
    文件夹中创建TS文件
    dependencModule.TS
  • \uuuu mocks\uuuu/@brand/dependencyModule.ts
    中,我们有:

    “严格使用”;
    从“事件”导入{EventEmitter};
    进口{
    打字
    }来自“@brand/dependencyModule”;
    类MockVisitor扩展了EventEmitter{
    someAttribute1:字符串;
    someAttribute2:字符串;
    someAttribute3:SomeTyping;
    建造师(部分){
    超级();
    this.someAttribute1=some;
    this.someAttribute2=参数;
    this.someAttribute3=mockHttpResponse;
    设置超时(()=>{
    这个.emit('ready');
    }, 100);
    }
    }
    类模拟模块{
    其他属性1:字符串;
    构造函数(其他参数){
    this.otherAttribute1=otherParam;
    }
    公共新访客(部分,参数){
    返回新的MockVisitor(部分,参数);
    }
    }
    导出默认jest.fn().mockImplementation(()=>({
    开始:(something)=>{
    返回新的MockModule(something);
    }
    }));
    
    现在,在我的
    src/**/index.test.ts
    文件中,我有:

    
    描述('试图模仿@brand/dependencModule',()=>{
    test('它应该使用模拟版本',async()=>{
    设isReady=null;
    常量{container}=render(
    {
    isReady=真;
    }}
    >
    你好
    );
    等待等待(()=>{
    如果(!isReady){
    抛出新错误(“未准备就绪”);
    }
    });
    期望(isReady)。toEqual(true);
    });
    });
    
    最后,让我们看看使用“@brand/dependencyModule”的
    MyHookProvider.tsx
    文件:

    import-React,{useState,useffect,SetStateAction,Dispatch,useContext}从'React'导入;
    从“@brand/dependencyModule”导入dependencyModule;
    导出常量MyHookProvider:React.SFC=({
    // ...
    奥尼通,
    }:ProviderProps)=>{
    useffect(()=>{
    const module=dependencModule.start('hello');
    const visitorestance=module.newVisitor('stack','overflow');
    visitorestance.on('ready',()=>{
    奥尼酮()
    });
    }, [/*...*/]);
    返回(
    {“我准备好了。”}
    );
    };
    MyHookProvider.defaultProps={
    ONINITONE:():无效=>{
    //无所事事
    },
    };
    
    现在我在运行
    npm run test
    时遇到的错误,我希望jest能够检测到我模拟了
    @brand/dependencModule
    ,但当我调试时,它实际上运行的是真正的库。我不知道我错过了什么才能让它发挥作用

    有什么帮助吗?谢谢大家!

    下面是我用于单元测试的LIB:

            "@testing-library/jest-dom": "^5.5.0",
            "@types/jest": "^25.2.1",
            "@types/enzyme": "^3.10.5",
            "@types/enzyme-adapter-react-16": "^1.0.6",
            "enzyme": "^3.11.0",
            "enzyme-adapter-react-16": "^1.15.2",
            "enzyme-to-json": "^3.4.4",
            "jest": "^25.4.0",
            "jest-mock-axios": "^3.2.0",
            "ts-jest": "^25.4.0",
    
    
    jest配置设置如下:

        "jest": {
            "setupFilesAfterEnv": [
                "./src/setupTests.js"
            ]
        }
    
    使用
    src/setupTests.js

    import { configure } from 'enzyme';
    import Adapter from 'enzyme-adapter-react-16';
    
    configure({ adapter: new Adapter() });