Jestjs 找不到Nestjs测试模块
我使用Mongdoose和Nestjs创建了一个简单的RESTAPI。我总共做了两次测试,结果都失败了。 测试输出: src/app/auth/auth.service.spec.ts失败 ● 测试套件无法运行Jestjs 找不到Nestjs测试模块,jestjs,nestjs,Jestjs,Nestjs,我使用Mongdoose和Nestjs创建了一个简单的RESTAPI。我总共做了两次测试,结果都失败了。 测试输出: src/app/auth/auth.service.spec.ts失败 ● 测试套件无法运行 Cannot find module '@shared/errors' from 'user.service.ts' 1 | import { BadRequestException, Injectable } from '@nestjs/common'; 2 | import
Cannot find module '@shared/errors' from 'user.service.ts'
1 | import { BadRequestException, Injectable } from '@nestjs/common';
2 | import { InjectModel } from '@nestjs/mongoose';
> 3 | import { Errors } from '@shared/errors';
| ^
4 | import { createMultipleRandom } from '@shared/utils';
5 | import { Model } from 'mongoose';
6 | import { AppLogger } from '../logger/logger';
at Resolver.resolveModule (../../node_modules/jest-resolve/build/index.js:259:17)
at Object.<anonymous> (user/user.service.ts:3:1)
auth.service.spec.ts:
从'@nestjs/testing'导入{Test,TestingModule};
从“/auth.service”导入{AuthService};
描述('AuthService',()=>{
let服务:AuthService;
beforeach(异步()=>{
常量模块:TestingModule=等待测试。createTestingModule({
提供者:[授权服务],
}).compile();
service=module.get(AuthService);
});
它('应该定义',()=>{
expect(service.toBeDefined();
});
});
在@shared/errors.ts中,我只导出一个常量变量。由于它不是一个模块,我应该如何在测试中导入它?如何解决此问题?在使用typescript的路径映射时,还需要使用映射的路径更新jest配置。您的jest配置需要添加以下内容:
{
...
“moduleNameMapper”:{
“^@Shared/(.)*$”:“/src/app/Shared/$1”
}
}
假设您的
设置为
,而不是/src
。您可以。这里是解决jest路径问题的详细配置
moduleNameMapper中定义的键将替换为它们的值
例如,当jest看到“@resources”时,它会将其替换为“src/resources”
(使用索引文件帮助很大)
package.json中的Jest配置
"jest": {
"moduleFileExtensions": [
"js",
"json",
"ts"
],
"rootDir": "src",
"moduleNameMapper": {
"@resources": "<rootDir>/resources",
"@shared": "<rootDir>/shared",
"@email": "<rootDir>/email",
"@auth": "<rootDir>/auth",
"@config": "<rootDir>/config",
"@database": "<rootDir>/database"
},
"testRegex": ".*\\.spec\\.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"collectCoverageFrom": [
"**/*.(t|j)s"
],
"coverageDirectory": "../coverage",
"testEnvironment": "node"
}
谢谢,这对我很有用:)我现在正在尝试测试使用Mongoose模型的服务,你对此也有一些建议吗?我想这会对我有帮助。你需要一个模拟模型来管理它。你可以像示例中那样模拟模型,但我现在有另一个问题。它说,“数据库连接”在MongooseModule上下文中不可用。既然我做了mock,为什么我需要一个连接呢?这会让我相信在代码的某个地方仍然有一个数据库连接在使用。如果不知道发生了什么,就很难回答。听起来像是一些模型,它被完全嘲笑了,但再一次,不能肯定我发现了问题。在“AuthService”中,我注入了“UserService”,它使用MongooseModule.forFeature(…)。所以MongooseModule在测试文件中丢失了。在我导入MondoosModule.forRoot(..)模块后,它工作了。再次感谢。
{
"compilerOptions": {
"module": "commonjs",
"declaration": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"target": "es2017",
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./",
"incremental": true,
"paths": {
"@app/*": ["src/app/*"],
"@auth/*": ["src/app/auth/*"],
"@config/*": ["config/*"],
"@logger/*": ["src/app/logger/*"],
"@shared/*": ["src/app/shared/*"],
"@user/*": ["src/app/user/*"],
}
},
"include": [
"src/**/*"
],
"exclude": ["node_modules", "dist"]
}
"jest": {
"moduleFileExtensions": [
"js",
"json",
"ts"
],
"rootDir": "src",
"moduleNameMapper": {
"@resources": "<rootDir>/resources",
"@shared": "<rootDir>/shared",
"@email": "<rootDir>/email",
"@auth": "<rootDir>/auth",
"@config": "<rootDir>/config",
"@database": "<rootDir>/database"
},
"testRegex": ".*\\.spec\\.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"collectCoverageFrom": [
"**/*.(t|j)s"
],
"coverageDirectory": "../coverage",
"testEnvironment": "node"
}
"paths": {
"@resources/*": ["src/resources/*"],
"@resources": ["src/resources"],
"@shared/*": ["src/shared/*"],
"@shared": ["src/shared"],
"@email/*": ["src/email/*"],
"@email": ["src/email"]
}