Nestjs Jest单元测试:基本测试失败- Jest配置

lf5gs5x2  于 2023-01-15  发布在  Jest
关注(0)|答案(1)|浏览(309)

我有一个简单的笑话测试我的Nest JS项目。
笑话看起来像:

import { Test, TestingModule } from '@nestjs/testing';
import { IbmVpcController } from './ibm.vpc.controller';
import { IbmVpcServiceMock } from './ibm.vpc.service.mock';
import { ModuleMocker, MockFunctionMetadata } from 'jest-mock';
import { MOCKED_VPC } from '../../repository/ibm/mock.vpc.data';

const moduleMocker = new ModuleMocker(global);

describe('IbmVpcController', () => {
  let controller: IbmVpcController;

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [IbmVpcController],
      providers: [IbmVpcServiceMock]
    })
      .useMocker((token) => {
        if (token === IbmVpcServiceMock) {
          return {
            list: jest.fn().mockResolvedValue(MOCKED_VPC.VPCs),
            get: jest.fn().mockResolvedValue(MOCKED_VPC.VPCs[0]),
            create: jest.fn().mockResolvedValue(MOCKED_VPC.VPCs[0]),
            update: jest.fn().mockResolvedValue(MOCKED_VPC.VPCs[0]),
          };
        }
        if (typeof token === 'function') {
          const mockMetadata = moduleMocker.getMetadata(token) as MockFunctionMetadata<any, any>;
          const Mock = moduleMocker.generateFromMetadata(mockMetadata);
          return new Mock();
        }
      })
      .compile();

    controller = module.get<IbmVpcController>(IbmVpcController);
  });

  it('should be defined', () => {
    expect(controller).toBeDefined();
  });
});

我的jest.config.js看起来像:

module.exports = {
  verbose: true,
  preset: "ts-jest",
  testEnvironment: "node",
  roots: ["./src"],
  transform: { "\\.ts$": ["ts-jest"] },
  testRegex: "(/__test__/.*|(\\.|/)(spec))\\.ts?$",
  moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"],
  transformIgnorePatterns: [
    '<rootDir>/node_modules/',
  ],
  globals: {
    "ts-jest": {
      tsconfig: {
        // allow js in typescript
        allowJs: true,
      },
    },
  },
};

但是,它失败,并出现以下错误:

FAIL  apps/protocols/src/ibm/vpc/ibm.vpc.controller.spec.ts
  ● Test suite failed to run
                                                                                                                                                                
    Jest encountered an unexpected token

    This usually means that you are trying to import a file which Jest cannot parse, e.g. it's not plain JavaScript.

    By default, if Jest sees a Babel config, it will use that to transform your files, ignoring "node_modules".

    Here's what you can do:
     • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/en/ecmascript-modules for how to enable it.
     • To have some of your "node_modules" files transformed, you can specify a custom "transformIgnorePatterns" in your config.
     • If you need a custom transformation specify a "transform" option in your config.
     • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the "moduleNameMapper" config option.

    You'll find more details and examples of these config options in the docs:
    https://jestjs.io/docs/en/configuration.html

    Details:

    C:\Users\pradipm\clients\CloudManager\cm_6\occm\client-infra\nest-services\node_modules\axios\index.js:1
    ({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){import axios from './lib/axios.js';
                                                                                             ^^^^^^

    SyntaxError: Cannot use import statement outside a module

      at Runtime.createScriptFromCode (../../node_modules/jest-runtime/build/index.js:1350:14)
      at Object.<anonymous> (../../node_modules/retry-axios/src/index.ts:124:1)

现在能够得到它什么,我错过了我的 typescript 巢的笑话配置。
基本上,我尝试了一些更多的选择也:
1.我尝试将transformIgnorePatterns仅指定为“/node_modules/”。
1.排除了lodash-es ','axios'
1.将transformIgnorePattens作为“/lib/”进行了测试(其中包含axois)
1.在tsconfig.app.json中添加了allowJs: true
任何帮助我通过第一次基本测试的人都会很有帮助。

yv5phkfx

yv5phkfx1#

With axios version 1.1.2 there's a bug with jest。可以通过将moduleNameMapper: { '^axios$': require.resovle('axios') }添加到jest配置中来解决此问题

相关问题