You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS E2E测试报错:未指定默认引擎且无扩展名提供

问题解答

是的,你需要在测试环境中手动配置视图引擎相关设置,因为通过Test.createTestingModule创建的Nest应用实例不会自动继承main.ts里的应用配置逻辑。

具体修改步骤

  1. 导入必要依赖:在app.e2e-spec.ts中导入NestExpressApplication类型和join方法(来自path模块)
  2. 添加视图引擎配置:在测试的beforeEach钩子中,创建应用时指定类型为NestExpressApplication,并复制main.ts里的视图配置代码

修改后的app.e2e-spec.ts代码

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

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

  beforeEach(async () => {
    const moduleFixture: TestingModule = await Test.createTestingModule({
      imports: [AppModule],
    }).compile();

    // 创建NestExpressApplication类型的实例
    app = moduleFixture.createNestApplication<NestExpressApplication>();
    // 复制main.ts中的视图配置
    app.setBaseViewsDir(join(__dirname, '..', 'src', 'views'));
    app.setViewEngine('hbs');
    await app.init();
  });

  it('/ (GET)', () => {
    return request(app.getHttpServer())
      .get('/')
      .expect(200)
      .expect('Hello world!'); // 注意:与controller返回的message大小写保持一致
  });
});

关键说明

  • 测试环境的应用实例是独立创建的,不会自动执行main.ts中的bootstrap函数,因此必须手动添加视图引擎、视图目录这类配置
  • 注意调整视图目录的路径:测试文件通常位于test目录下,所以路径需要改为join(__dirname, '..', 'src', 'views')(对应项目根目录下的src/views),确保能正确找到模板文件
  • 检查断言文本的大小写:你的app.controller.ts中返回的是'Hello world!',但原测试代码中断言的是'Hello World!',大小写不匹配也会导致测试失败,需要保持一致

内容的提问来源于stack exchange,提问作者IdanB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 03:31:14