1

我是这个框架的新手。我也实现了 crud 操作、迁移、单元测试,但我知道如何在 Nest JS 框架中实现 e2e 测试。我试图运行 e2e 测试程序它抛出一个错误如何解决这个错误。我尝试了很多方法,但我无法获得解决方案 在此处输入图像描述它显示此错误没有找到“UserEntity”的存储库。看起来这个实体没有在当前的“默认”连接中注册?. 所以,我试图改变我的数据库配置

数据库配置

{
              type: 'postgres',
              host:  process.env[`${process.env.NODE_ENV}_POSTGRES_HOST`],
              port: parseInt(process.env[`${process.env.NODE_ENV}_POSTGRES_PORT`]) || 5432,
              username: process.env[`${process.env.NODE_ENV}_POSTGRES_USER`],
              password: process.env[`${process.env.NODE_ENV}_POSTGRES_PASSWORD`],
              database: process.env[`${process.env.NODE_ENV}_POSTGRES_DATABASE`],
              entities: ["dist/**/*.entity{ .ts,.js}"],
              migrations: ["dist/database/migration/*.js"],
              cli:{
                  migrationsDir: 'src/database/migration',
                  }
            }

此问题出现在数据库配置中的实体列中。如果我更改实体目录,应用程序将无法运行。如何解决此问题

tsconfig.json

{
  "compilerOptions": {
    "module": "commonjs",
    "declaration": true,
    "removeComments": true,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "allowSyntheticDefaultImports": true,
    "target": "es2017",
    "sourceMap": true,
    "outDir": "./dist",
    "baseUrl": "./",
    "incremental": true
  }
}
4

1 回答 1

1

e2e 基本上是客户端与控制器交谈的测试。

大多数情况下,“UserEntity”应该永远不会出现。相反,userDto 可以成为前端对象,然后将在 userEntity 中解析其值。

话虽如此,让我们讨论更多应该发生的事情。

  1. e2e测试向控制器发送get请求

  2. 带有 @Get() 装饰器的控制器内部的函数接收请求

例子

@Controller()
export class AppController {
 @Get() 
  public async helloWorld(){
    //// does something
  }
}
  1. 然后,该函数调用实现 crud 的服务
@Controller()
export class AppController {
    @Get() 
    public helloWorld(){
      return this.userService.get();
    }
}
  1. 为了能够从控制器调用服务,您将需要一个构造函数。
@Controller()
export class AppController {
 constructor(private readonly userService: UserService){}

    @Get() 
    public helloWorld(){
      return this.userService.get();
    }
}

所有这些文件,都必须包含在 app.module 中。

  • 作为提供者的服务
  • 控制器作为控制器
  • 并且必须导入与数据库相关的所有内容

例子

@Module({
  imports: [
    UserEntiy,
  ],
  controllers: [AppController],
  providers: [UserService],
  exports: [],
})
export class AppModule {}

现在,在测试文件中,您应该导入 AppModule 以便项目可以启动并且您的控制器已启动并等待接收 http 请求。

如果您在 db config 中的路径正在查看 dist,请确保 npm run build在更改后运行

于 2021-06-03T10:20:34.150 回答