jest test emitting events for eventemitter objects (express)

后端 未结 1 569
孤城傲影
孤城傲影 2021-01-27 19:53

trying to get an inspiration from jest test emitting events for eventemitter objects (http) didn\'t solve my pain with express.

assume the following nodejs code

相关标签:
1条回答
  • 2021-01-27 20:36

    You can't use jest.mock in the function scope. It should be used in the module scope. Instead of using jest.mock inside the test case function, you should use jest.doMock(moduleName, factory, options)

    E.g. server.js:

    const express = require('express');
    const app = express();
    
    const server = app.listen(8080, '127.0.0.1').on('error', (err) => {
      console.log(err);
    });
    
    module.exports = server;
    

    server.test.js:

    describe('60451082', () => {
      it('should pass', () => {
        const mError = new Error('network');
        const appMock = {
          listen: jest.fn().mockReturnThis(),
          on: jest.fn().mockImplementationOnce((event, handler) => {
            handler(mError);
          }),
        };
        jest.doMock('express', () => jest.fn(() => appMock));
        const logSpy = jest.spyOn(console, 'log');
        const express = require('express');
        require('./server');
        expect(express).toBeCalledTimes(1);
        expect(appMock.listen).toBeCalledWith(8080, '127.0.0.1');
        expect(appMock.on).toBeCalledWith('error', expect.any(Function));
        expect(logSpy).toBeCalledWith(mError);
      });
    });
    

    Unit test results with 100% coverage:

     PASS  stackoverflow/60451082/server.test.js
      60451082
        ✓ should pass (19ms)
    
      console.log node_modules/jest-environment-enzyme/node_modules/jest-mock/build/index.js:866
        Error: network
            at Object.<anonymous> (/Users/ldu020/workspace/github.com/mrdulin/react-apollo-graphql-starter-kit/stackoverflow/60451082/server.test.js:3:20)
            at Object.asyncJestTest (/Users/ldu020/workspace/github.com/mrdulin/react-apollo-graphql-starter-kit/node_modules/jest-jasmine2/build/jasmineAsyncInstall.js:100:37)
            at resolve (/Users/ldu020/workspace/github.com/mrdulin/react-apollo-graphql-starter-kit/node_modules/jest-jasmine2/build/queueRunner.js:43:12)
            at new Promise (<anonymous>)
            at mapper (/Users/ldu020/workspace/github.com/mrdulin/react-apollo-graphql-starter-kit/node_modules/jest-jasmine2/build/queueRunner.js:26:19)
            at promise.then (/Users/ldu020/workspace/github.com/mrdulin/react-apollo-graphql-starter-kit/node_modules/jest-jasmine2/build/queueRunner.js:73:41)
            at process._tickCallback (internal/process/next_tick.js:68:7)
    
    -----------|---------|----------|---------|---------|-------------------
    File       | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
    -----------|---------|----------|---------|---------|-------------------
    All files  |     100 |      100 |     100 |     100 |                   
     server.js |     100 |      100 |     100 |     100 |                   
    -----------|---------|----------|---------|---------|-------------------
    Test Suites: 1 passed, 1 total
    Tests:       1 passed, 1 total
    Snapshots:   0 total
    Time:        4.444s, estimated 10s
    

    source code: https://github.com/mrdulin/react-apollo-graphql-starter-kit/tree/master/stackoverflow/60451082

    0 讨论(0)
提交回复
热议问题