当前位置: 首页 > 知识库问答 >
问题:

使用NestJs和Typeorm启动时e2e测试失败

慕容劲
2023-03-14

我使用NestJS框架和typeorm。使用数据库时,所有数据都会成功保存。连接没有问题。我尝试用Jest配置e2e测试。不幸的是,我有两个错误:

TypeError: Cannot read property 'getHttpServer' of undefined

找不到“用户”的存储库。看起来此实体未在当前“默认”连接中注册?

我试图使用本教程设置测试环境。

我的文件:

应用程序。e2e-spec.ts

import { Test, TestingModule } from '@nestjs/testing';
import { INestApplication } from '@nestjs/common';
import * as request from 'supertest';
import { AppModule } from '../src/app.module';
import { TypeOrmModule } from '@nestjs/typeorm';

describe('AppController (e2e)', () => {
  let app: INestApplication;

  beforeAll(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [
        AppModule,
        TypeOrmModule.forRoot({
          'type': 'mssql',
          'host': 'localhost',
          'port': 1433,
          'username': 'gift_draw_db',
          'password': '',
          'database': 'gift_draw_local',
          'entities': ['./**/*.entity.ts'],
          'synchronize': false,
        }),
      ],
      providers: [],
    }).compile();

    app = moduleFixture.createNestApplication();
    console.error(process.env.DB_DATABASE_NAME, '<------------------------------'); // NEVER SEEN THIS
    await app.init();
  });

  afterAll(async () => {
    await app.close();
  });

  it('/api/ (GET)', async () => {
    return request(app.getHttpServer()) // 1st error
      .get('/api/')
      .expect(200)
      .expect('Working!');
  });
});

应用程序。单元ts

@Module({
  imports: [
    ConfigModule,
    AuthModule,
    DrawModule,
    UserModule
    ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

user.e2e-spec.ts

describe('User', () => {
  let app: INestApplication;
  let repository: Repository<User>;

  beforeAll(async () => {
    const module = await Test.createTestingModule({
      imports: [
        UserModule,
        TypeOrmModule.forRoot({
          'type': 'mssql',
          'host': 'localhost',
          'port': 1433,
          'username': 'gift_draw_db',
          'password': '',
          'database': 'gift_draw_local',
          'entities': ['./**/*.entity.ts'],
          'synchronize': false,
        }),
      ],
    }).compile();

    app = module.createNestApplication();

    repository = module.get('UserRepository');
    await app.init();
  });

  afterEach(async () => {
    await repository.query(`DELETE FROM users;`);
  });

  afterAll(async () => {
    await app.close();
  });
});

user.module.ts

@Module({
  controllers: [UserController],
  imports: [TypeOrmModule.forFeature([User])],
  providers: [UserService],
  exports: [UserService, TypeOrmModule],
})
export class UserModule {
}

config.module.ts

@Module({
  imports: [
    NestConfigModule.forRoot({
      isGlobal: true,
      load: [configuration]
    }),
    TypeOrmModule.forRoot(process.env.NODE_ENV === 'production' ? {...configProd} : {...configDev} )
  ],
})
export class ConfigModule {
}

ConfigModule具有与测试模块相同的凭据。

共有1个答案

郜光明
2023-03-14

问题是,当您启动应用程序时,基本目录是“dist”,而当您启动“e2e”测试时,基本目录是“src”。

您可以将实体定义更改为类似于以下内容:

entities: [__dirname + '/../**/*.entity.ts']
 类似资料:
  • 前言 吐槽 e2e测试在前端测试中,也许是最不被看重的一项吧。 小公司就不说了,即使是大厂,也极少有e2e测试。因为它需要花费的精力,相比得到的回报而言,可以说是相差悬殊,说白了,就是吃力不讨好- -|| e2e测试其实就是模拟用户行为,我们得根据业务写各种各样的不同操作。而几乎所有的项目,业务都是会变的。所以,因为业务变了,模拟用户行为也会随之改变。最后,就各种改,即改业务代码,又改测试代码,结

  • 我正在尝试使用NestJS和TypeORM为我的数据库设置种子。 我有一个迁移文件,它创建了一个表,还有一个种子文件,它将一个插入到表中。这些文件的主要区别是迁移文件直接运行查询: 当种子文件获取存储库时: 这个是产生错误的那个。 在一个服务中,我获得了存储库并保存了实体,没有任何问题。问题只在播种时发生。 我注册打字格式如下: 哪里: 我正在使用使用以下网页配置编译和服务应用程序: 我的结构最终

  • 这里的文件如下: 当涉及到应用程序的单元测试时,我们通常希望避免建立数据库连接,保持测试套件的独立性并尽可能快地执行它们。但是我们的类可能依赖于从连接实例中提取的存储库。我们如何处理?解决方案是创建模拟存储库。为了实现这一点,我们建立了自定义提供者。每个注册的存储库都由存储库令牌自动表示,其中EntityName是实体类的名称。 @nestjs/typeorm包公开了getRepositoryTo

  • 我有一个实体像下面在Nestjs应用程序与typeorm为mongoDB: 我的其他实体扩展了审计,在我的应用程序中,我使用jwt来验证用户。 问题是,当我想保存一个实体,我不知道如何设置createdBy与@Before插入钩子... 我知道请求中有用户,但我不知道将用户引入方法的正确方法是什么?

  • 问题内容: 我实际上正在尝试e2e测试我的简单应用程序,并且在处理angular- recaptcha(https://github.com/VividCortex/angular- recaptcha )时遇到一些麻烦。 这是我的测试: 因此,您可以看到我正在尝试填充Recaptcha值,但我不知道如何进行。 你能帮助我吗 ? 注意:我正在使用量角器 谢谢你的帮助 问题答案: 验证码已加载到中,

  • 我无法使用安全性配置我的Spring Boot服务器的“自测”。这意味着我使用本教程创建了一个自签名证书。当我从浏览器打开https://localhost:8080时,没有问题,我有一个安全的加密连接。 但是,当我想要设置一个REST模板来调用https://localhost:8080时,我得到了这个错误: 测试类和项目:https://github.com/mpawel1993/family