无法仅从 NestJS 中的 TestingModule 连接到 MongoDB
Unable to connect to MongoDB only from TestingModule in NestJS
我正在对我的 NestJS 应用程序进行端到端测试,但出现以下错误:
[ExceptionHandler] Unable to connect to the database. Retrying (1)... +1977ms
这是我的 beforeEach 函数,我在其中初始化模块:
beforeEach(async () => {
const mod = await Test.createTestingModule({
imports: [
ConfigModule.forRoot({ isGlobal: true, load: [cfg] }),
MongooseModule.forRootAsync({
useFactory: async (cfg: ConfigService) => {
return {
uri: cfg.get("mongouri"),
};
},
}),
AccountModule,
],
}).compile();
conf = mod.get<ConfigService>(ConfigService);
app = mod.createNestApplication();
await app.init();
});
最让我困惑的是,当我使用 nest start --watch
命令正常启动我的应用程序时(在我的 AppModule 中,MongooseModule 初始化与此处完全相同),一切都完美无缺,所以我想问题出在 TestingModule 的某个地方,我不知道具体在哪里以及我该怎么做。
我不完全确定,但显然我以某种方式改进了我的 Jest 配置。从 moduleDirectories
中删除根目录确实解决了问题。
"moduleDirectories": [
"node_modules",
""
],
至
"moduleDirectories": [
"node_modules"
],
我不知道它是如何以及为什么起作用的,很高兴听到比我更有能力的人的原因。
我什至将这行添加到 Jest 配置的主要原因只是因为我懒得在我一半的项目文件中将绝对路径更改为相对路径。
那是因为这一行。
import * as mongoose from 'mongoose';
...
static forRootAsync(options: MongooseModuleAsyncOptions): DynamicModule {
...
return await defer(async () =>
mongooseConnectionFactory(
mongoose.createConnection(mongooseModuleOptions.uri as string, {
useNewUrlParser: true,
useUnifiedTopology: true,
...mongooseOptions,
}),
...
}
如果在moduleDirectories
上添加""
或"./"
路径,mongoose
模块指向此处。 https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/mongoose/index.d.ts#L78
没有 createConnection
方法,因此在调用 mongoose.createConnection()
时发生 mongoose.createConnection is not defined
错误。
我正在对我的 NestJS 应用程序进行端到端测试,但出现以下错误:
[ExceptionHandler] Unable to connect to the database. Retrying (1)... +1977ms
这是我的 beforeEach 函数,我在其中初始化模块:
beforeEach(async () => {
const mod = await Test.createTestingModule({
imports: [
ConfigModule.forRoot({ isGlobal: true, load: [cfg] }),
MongooseModule.forRootAsync({
useFactory: async (cfg: ConfigService) => {
return {
uri: cfg.get("mongouri"),
};
},
}),
AccountModule,
],
}).compile();
conf = mod.get<ConfigService>(ConfigService);
app = mod.createNestApplication();
await app.init();
});
最让我困惑的是,当我使用 nest start --watch
命令正常启动我的应用程序时(在我的 AppModule 中,MongooseModule 初始化与此处完全相同),一切都完美无缺,所以我想问题出在 TestingModule 的某个地方,我不知道具体在哪里以及我该怎么做。
我不完全确定,但显然我以某种方式改进了我的 Jest 配置。从 moduleDirectories
中删除根目录确实解决了问题。
"moduleDirectories": [
"node_modules",
""
],
至
"moduleDirectories": [
"node_modules"
],
我不知道它是如何以及为什么起作用的,很高兴听到比我更有能力的人的原因。
我什至将这行添加到 Jest 配置的主要原因只是因为我懒得在我一半的项目文件中将绝对路径更改为相对路径。
那是因为这一行。
import * as mongoose from 'mongoose';
...
static forRootAsync(options: MongooseModuleAsyncOptions): DynamicModule {
...
return await defer(async () =>
mongooseConnectionFactory(
mongoose.createConnection(mongooseModuleOptions.uri as string, {
useNewUrlParser: true,
useUnifiedTopology: true,
...mongooseOptions,
}),
...
}
如果在moduleDirectories
上添加""
或"./"
路径,mongoose
模块指向此处。 https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/mongoose/index.d.ts#L78
没有 createConnection
方法,因此在调用 mongoose.createConnection()
时发生 mongoose.createConnection is not defined
错误。