The previous jest-config fix let the module graph load further and exposed two more reasons the server e2e never passed since it was added: 1. ESM transform chain: AppModule pulls in editor-ext -> @tiptap -> @sindresorhus/slugify -> @sindresorhus/transliterate / escape-string-regexp, plus p-limit -> yocto-queue — all ESM-only. Extend the e2e transformIgnorePatterns whitelist to transform them (scoped packages need both the pnpm `@scope+name` and nested `@scope/name` path forms, hence `@sindresorhus[+/][a-z0-9-]+`). Verified locally: the graph now fully transforms and resolves. 2. Wrong HTTP adapter: Docmost runs on Fastify (main.ts uses FastifyAdapter) and does not depend on @nestjs/platform-express, but the scaffold test used the default createNestApplication() (Express) and died with "@nestjs/platform-express package is missing". Switch the test to FastifyAdapter + getInstance().ready(), close in afterEach. Verified locally: createNestApplication + app.init() now proceed to the live Redis/Postgres connection (the infra CI provides via services + migrations). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
41 lines
1.3 KiB
TypeScript
41 lines
1.3 KiB
TypeScript
import { Test, TestingModule } from '@nestjs/testing';
|
|
import {
|
|
FastifyAdapter,
|
|
NestFastifyApplication,
|
|
} from '@nestjs/platform-fastify';
|
|
import * as request from 'supertest';
|
|
import { AppModule } from '../src/app.module';
|
|
|
|
describe('AppController (e2e)', () => {
|
|
let app: NestFastifyApplication;
|
|
|
|
beforeEach(async () => {
|
|
const moduleFixture: TestingModule = await Test.createTestingModule({
|
|
imports: [AppModule],
|
|
}).compile();
|
|
|
|
// Docmost runs on Fastify (see src/main.ts). The default
|
|
// createNestApplication() would load @nestjs/platform-express, which is not
|
|
// a dependency of this project, so an explicit FastifyAdapter is required.
|
|
app = moduleFixture.createNestApplication<NestFastifyApplication>(
|
|
new FastifyAdapter(),
|
|
);
|
|
await app.init();
|
|
// Fastify must finish booting before its HTTP server can serve requests.
|
|
await app.getHttpAdapter().getInstance().ready();
|
|
});
|
|
|
|
afterEach(async () => {
|
|
// Guard with optional chaining: if beforeEach throws before `app` is
|
|
// assigned, closing undefined would mask the original failure.
|
|
await app?.close();
|
|
});
|
|
|
|
it('/ (GET)', () => {
|
|
return request(app.getHttpServer())
|
|
.get('/')
|
|
.expect(200)
|
|
.expect('Hello World!');
|
|
});
|
|
});
|