Nestjs e2e 测试没有记录器输出

mom*_*omi 7 logging e2e-testing nestjs

我在开发过程中使用 NestJS 中的默认内置记录器形成简单的日志记录。但是当我运行 e2e 测试时,控制台上没有记录器输出。确实需要这个,看看测试失败时会发生什么。package.json 中的片段:

"test:e2e": "jest --config ./test/jest-e2e.json"

和 jest-e2e.json:

{
  "moduleFileExtensions": ["js", "json", "ts"],
  "rootDir": ".",
  "testEnvironment": "node",
  "testRegex": ".e2e-spec.ts$",
  "transform": {
    "^.+\\.(t|j)s$": "ts-jest"
  },
  "verbose": true
}
Run Code Online (Sandbox Code Playgroud)

sez*_*zeb 8

之后可以覆盖链上的记录器createTestingModule

const module_: TestingModule = await Test.createTestingModule({
    ...
})
    .setLogger(new Logger())
    .compile();
Run Code Online (Sandbox Code Playgroud)

幸运的是,它比 的方法要短一些app.useLogger

此功能已添加在https://github.com/nestjs/nest/pull/6071

据我所知,您必须为每个测试设置执行此操作。

我个人认为这是荒谬的。当然,在修复测试时我需要日志,包括调试日志,并且我希望它们无需添加一些额外的代码


mom*_*omi 5

我创建了一个扩展 ConsoleLogger 的记录器,但没有任何改变。但我发现我需要告诉TestingModule使用它:

    describe('App (e2e)', () => {
      let app: INestApplication;
    
      beforeAll(async () => {
        const moduleFixture: TestingModule = await Test.createTestingModule({
          imports: [AppModule],
        }).compile();
    
        app = moduleFixture.createNestApplication();
        await app.init();
        app.useLogger(new Logger());
      });

Run Code Online (Sandbox Code Playgroud)


Jay*_*iel 4

默认测试记录器没有logdebugwarn的实现verbose。您需要传递自己的记录器才能使这些日志再次显示。通常是为了保持测试输出干净

  • 使用“Test.createTestingModule()”时,测试模块的代码将通过“app.useLogger(new TestingLogger())”使用“TestingLogger”提供程序并覆盖原始记录器 (3认同)