未找到 Nestjs 测试模块

H.G*_*dgn 9 jestjs nestjs

我使用 Mongdoose 和 Nestjs 创建了一个简单的 REST API。我总共进行了 2 次测试,但都失败了。\n测试输出:

\n\n
\n

FAIL src/app/auth/auth.service.spec.ts\n \xe2\x97\x8f 测试套件运行失败

\n
\n\n
Cannot find module \'@shared/errors\' from \'auth.service.ts\'\n\n   5 | \n   6 | import { AppLogger } from \'../logger/logger\';\n>  7 | import { Errors } from \'@shared/errors\';\n     | ^\n   8 | import { ILoginDto } from \'./dto/login.dto\';\n   9 | import { ITokenDto } from \'./dto/auth.dto\';\n  10 | import { IUser } from \'@user/document/user.doc\';\n\n  at Resolver.resolveModule (../../node_modules/jest-resolve/build/index.js:259:17)\n  at Object.<anonymous> (auth/auth.service.ts:7:1)\n
Run Code Online (Sandbox Code Playgroud)\n\n

FAIL src/app/user/user.service.spec.ts\n \xe2\x97\x8f 测试套件运行失败

\n\n
Cannot find module \'@shared/errors\' from \'user.service.ts\'\n\n  1 | import { BadRequestException, Injectable } from \'@nestjs/common\';\n  2 | import { InjectModel } from \'@nestjs/mongoose\';\n> 3 | import { Errors } from \'@shared/errors\';\n    | ^\n  4 | import { createMultipleRandom } from \'@shared/utils\';\n  5 | import { Model } from \'mongoose\';\n  6 | import { AppLogger } from \'../logger/logger\';\n\n  at Resolver.resolveModule (../../node_modules/jest-resolve/build/index.js:259:17)\n  at Object.<anonymous> (user/user.service.ts:3:1)\n
Run Code Online (Sandbox Code Playgroud)\n\n

测试套件:2 个失败,总共 2 个\n测试:总共 0 个\n快照:总共 0 个\n时间:2.751 秒\n运行所有测试套件。

\n\n

tsconfig.json:

\n\n
{\n  "compilerOptions": {\n    "module": "commonjs",\n    "declaration": true,\n    "removeComments": true,\n    "emitDecoratorMetadata": true,\n    "experimentalDecorators": true,\n    "target": "es2017",\n    "sourceMap": true,\n    "outDir": "./dist",\n    "baseUrl": "./",\n    "incremental": true,\n    "paths": {\n      "@app/*": ["src/app/*"],\n      "@auth/*": ["src/app/auth/*"],\n      "@config/*": ["config/*"],\n      "@logger/*": ["src/app/logger/*"],\n      "@shared/*": ["src/app/shared/*"],\n      "@user/*": ["src/app/user/*"],\n    }\n  },\n  "include": [\n    "src/**/*"\n  ],\n\n  "exclude": ["node_modules", "dist"]\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

auth.service.spec.ts:

\n\n
Cannot find module \'@shared/errors\' from \'auth.service.ts\'\n\n   5 | \n   6 | import { AppLogger } from \'../logger/logger\';\n>  7 | import { Errors } from \'@shared/errors\';\n     | ^\n   8 | import { ILoginDto } from \'./dto/login.dto\';\n   9 | import { ITokenDto } from \'./dto/auth.dto\';\n  10 | import { IUser } from \'@user/document/user.doc\';\n\n  at Resolver.resolveModule (../../node_modules/jest-resolve/build/index.js:259:17)\n  at Object.<anonymous> (auth/auth.service.ts:7:1)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 @shared/errors.ts 中,我只导出一个常量变量。由于它不是一个模块,我应该如何在测试中导入它?我怎么解决这个问题 ?

\n

ano*_*932 10

如果您来自 google,那么如果 VSCode 自动完成您的导入而src/xyz/abc/service.ts不是../xyz/abc/service.ts.

运行测试时,测试代码将无法在运行时找到正确的服务。'src/'它需要完全相对路径,开头没有绝对路径。

  • 我设法更改这些设置:“JavaScript › 首选项:导入模块说明符”和“TypeScript › 首选项:导入模块说明符”为“相对” (3认同)

Jay*_*iel 7

当您使用打字稿的路径映射时,您还需要使用映射的路径更新您的笑话配置。您的笑话配置需要添加以下内容:

{
  ...
  "moduleNameMapper": {
    "^@Shared/(.)*$": "<rootDir>/src/app/shared/$1"
  }
}
Run Code Online (Sandbox Code Playgroud)

假设您的<rootDir>设置为 is.且 not ./src。您可以在这里找到更多信息