Add e2e tests for nest (#15522)
This commit is contained in:
parent
a69f8abdf9
commit
0383fa6017
@ -64,6 +64,7 @@ describe('Node Applications + webpack', () => {
|
|||||||
const expressApp = uniq('expressapp');
|
const expressApp = uniq('expressapp');
|
||||||
const fastifyApp = uniq('fastifyapp');
|
const fastifyApp = uniq('fastifyapp');
|
||||||
const koaApp = uniq('koaapp');
|
const koaApp = uniq('koaapp');
|
||||||
|
const nestApp = uniq('koaapp');
|
||||||
|
|
||||||
runCLI(`generate @nrwl/node:lib ${testLib1}`);
|
runCLI(`generate @nrwl/node:lib ${testLib1}`);
|
||||||
runCLI(`generate @nrwl/node:lib ${testLib2} --importPath=@acme/test2`);
|
runCLI(`generate @nrwl/node:lib ${testLib2} --importPath=@acme/test2`);
|
||||||
@ -76,18 +77,27 @@ describe('Node Applications + webpack', () => {
|
|||||||
runCLI(
|
runCLI(
|
||||||
`generate @nrwl/node:app ${koaApp} --framework=koa --no-interactive`
|
`generate @nrwl/node:app ${koaApp} --framework=koa --no-interactive`
|
||||||
);
|
);
|
||||||
|
runCLI(
|
||||||
|
`generate @nrwl/node:app ${nestApp} --framework=nest --bundler=webpack --no-interactive`
|
||||||
|
);
|
||||||
|
|
||||||
// Use esbuild by default
|
// Use esbuild by default
|
||||||
checkFilesDoNotExist(`apps/${expressApp}/webpack.config.js`);
|
checkFilesDoNotExist(`apps/${expressApp}/webpack.config.js`);
|
||||||
checkFilesDoNotExist(`apps/${fastifyApp}/webpack.config.js`);
|
checkFilesDoNotExist(`apps/${fastifyApp}/webpack.config.js`);
|
||||||
checkFilesDoNotExist(`apps/${koaApp}/webpack.config.js`);
|
checkFilesDoNotExist(`apps/${koaApp}/webpack.config.js`);
|
||||||
|
|
||||||
|
// Uses only webpack
|
||||||
|
checkFilesExist(`apps/${nestApp}/webpack.config.js`);
|
||||||
|
|
||||||
expect(() => runCLI(`lint ${expressApp}`)).not.toThrow();
|
expect(() => runCLI(`lint ${expressApp}`)).not.toThrow();
|
||||||
expect(() => runCLI(`lint ${fastifyApp}`)).not.toThrow();
|
expect(() => runCLI(`lint ${fastifyApp}`)).not.toThrow();
|
||||||
expect(() => runCLI(`lint ${koaApp}`)).not.toThrow();
|
expect(() => runCLI(`lint ${koaApp}`)).not.toThrow();
|
||||||
|
expect(() => runCLI(`lint ${nestApp}`)).not.toThrow();
|
||||||
|
|
||||||
expect(() => runCLI(`lint ${expressApp}-e2e`)).not.toThrow();
|
expect(() => runCLI(`lint ${expressApp}-e2e`)).not.toThrow();
|
||||||
expect(() => runCLI(`lint ${fastifyApp}-e2e`)).not.toThrow();
|
expect(() => runCLI(`lint ${fastifyApp}-e2e`)).not.toThrow();
|
||||||
expect(() => runCLI(`lint ${koaApp}-e2e`)).not.toThrow();
|
expect(() => runCLI(`lint ${koaApp}-e2e`)).not.toThrow();
|
||||||
|
expect(() => runCLI(`lint ${nestApp}-e2e`)).not.toThrow();
|
||||||
|
|
||||||
// Only Fastify generates with unit tests since it supports them without additional libraries.
|
// Only Fastify generates with unit tests since it supports them without additional libraries.
|
||||||
expect(() => runCLI(`lint ${fastifyApp}`)).not.toThrow();
|
expect(() => runCLI(`lint ${fastifyApp}`)).not.toThrow();
|
||||||
@ -99,9 +109,13 @@ describe('Node Applications + webpack', () => {
|
|||||||
addLibImport(koaApp, testLib1);
|
addLibImport(koaApp, testLib1);
|
||||||
addLibImport(koaApp, testLib2, '@acme/test2');
|
addLibImport(koaApp, testLib2, '@acme/test2');
|
||||||
|
|
||||||
|
addLibImport(nestApp, testLib1);
|
||||||
|
addLibImport(nestApp, testLib2, '@acme/test2');
|
||||||
|
|
||||||
await runE2eTests(expressApp);
|
await runE2eTests(expressApp);
|
||||||
await runE2eTests(fastifyApp);
|
await runE2eTests(fastifyApp);
|
||||||
await runE2eTests(koaApp);
|
await runE2eTests(koaApp);
|
||||||
|
await runE2eTests(nestApp);
|
||||||
}, 300_000);
|
}, 300_000);
|
||||||
|
|
||||||
it('should generate a Dockerfile', async () => {
|
it('should generate a Dockerfile', async () => {
|
||||||
|
|||||||
@ -14,9 +14,9 @@ describe('AppController', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('getData', () => {
|
describe('getData', () => {
|
||||||
it('should return "Welcome to <%= name %>!"', () => {
|
it('should return "Hello API"', () => {
|
||||||
const appController = app.get<AppController>(AppController);
|
const appController = app.get<AppController>(AppController);
|
||||||
expect(appController.getData()).toEqual({message: 'Welcome to <%= name %>!'});
|
expect(appController.getData()).toEqual({message: 'Hello API'});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -14,8 +14,8 @@ describe('AppService', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('getData', () => {
|
describe('getData', () => {
|
||||||
it('should return "Welcome to <%= name %>!"', () => {
|
it('should return "Hello API"', () => {
|
||||||
expect(service.getData()).toEqual({message: 'Welcome to <%= name %>!'});
|
expect(service.getData()).toEqual({message: 'Hello API'});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -3,6 +3,6 @@ import { Injectable } from '@nestjs/common';
|
|||||||
@Injectable()
|
@Injectable()
|
||||||
export class AppService {
|
export class AppService {
|
||||||
getData(): { message: string } {
|
getData(): { message: string } {
|
||||||
return ({ message: 'Welcome to <%= name %>!' });
|
return ({ message: 'Hello API' });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,7 +12,7 @@ async function bootstrap() {
|
|||||||
const app = await NestFactory.create(AppModule);
|
const app = await NestFactory.create(AppModule);
|
||||||
const globalPrefix = 'api';
|
const globalPrefix = 'api';
|
||||||
app.setGlobalPrefix(globalPrefix);
|
app.setGlobalPrefix(globalPrefix);
|
||||||
const port = process.env.PORT || 3333;
|
const port = process.env.PORT || 3000;
|
||||||
await app.listen(port);
|
await app.listen(port);
|
||||||
Logger.log(`🚀 Application is running on: http://localhost:${port}/${globalPrefix}`);
|
Logger.log(`🚀 Application is running on: http://localhost:${port}/${globalPrefix}`);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -47,5 +47,6 @@ export function toNodeApplicationGeneratorOptions(
|
|||||||
setParserOptionsProject: options.setParserOptionsProject,
|
setParserOptionsProject: options.setParserOptionsProject,
|
||||||
rootProject: options.rootProject,
|
rootProject: options.rootProject,
|
||||||
bundler: 'webpack', // Some features require webpack plugins such as TS transformers
|
bundler: 'webpack', // Some features require webpack plugins such as TS transformers
|
||||||
|
isNest: true,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -415,6 +415,7 @@ export async function applicationGenerator(tree: Tree, schema: Schema) {
|
|||||||
name: options.rootProject ? 'e2e' : `${options.name}-e2e`,
|
name: options.rootProject ? 'e2e' : `${options.name}-e2e`,
|
||||||
project: options.name,
|
project: options.name,
|
||||||
port: options.port,
|
port: options.port,
|
||||||
|
isNest: options.isNest,
|
||||||
});
|
});
|
||||||
tasks.push(e2eTask);
|
tasks.push(e2eTask);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -20,6 +20,7 @@ export interface Schema {
|
|||||||
port?: number;
|
port?: number;
|
||||||
rootProject?: boolean;
|
rootProject?: boolean;
|
||||||
docker?: boolean;
|
docker?: boolean;
|
||||||
|
isNest?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export type NodeJsFrameWorks = 'express' | 'koa' | 'fastify' | 'nest' | 'none';
|
export type NodeJsFrameWorks = 'express' | 'koa' | 'fastify' | 'nest' | 'none';
|
||||||
|
|||||||
@ -43,7 +43,7 @@ export async function e2eProjectGenerator(host: Tree, _options: Schema) {
|
|||||||
if (options.projectType === 'server') {
|
if (options.projectType === 'server') {
|
||||||
generateFiles(
|
generateFiles(
|
||||||
host,
|
host,
|
||||||
path.join(__dirname, 'files/server'),
|
path.join(__dirname, 'files/server/common'),
|
||||||
options.e2eProjectRoot,
|
options.e2eProjectRoot,
|
||||||
{
|
{
|
||||||
...options,
|
...options,
|
||||||
@ -52,6 +52,20 @@ export async function e2eProjectGenerator(host: Tree, _options: Schema) {
|
|||||||
tmpl: '',
|
tmpl: '',
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
if (options.isNest) {
|
||||||
|
generateFiles(
|
||||||
|
host,
|
||||||
|
path.join(__dirname, 'files/server/nest'),
|
||||||
|
options.e2eProjectRoot,
|
||||||
|
{
|
||||||
|
...options,
|
||||||
|
...names(options.rootProject ? 'server' : options.project),
|
||||||
|
offsetFromRoot: offsetFromRoot(options.e2eProjectRoot),
|
||||||
|
tmpl: '',
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
} else if (options.projectType === 'cli') {
|
} else if (options.projectType === 'cli') {
|
||||||
const mainFile = appProject.targets.build?.options?.outputPath;
|
const mainFile = appProject.targets.build?.options?.outputPath;
|
||||||
generateFiles(
|
generateFiles(
|
||||||
|
|||||||
@ -0,0 +1,10 @@
|
|||||||
|
import axios from 'axios';
|
||||||
|
|
||||||
|
describe('GET /api', () => {
|
||||||
|
it('should return a message', async () => {
|
||||||
|
const res = await axios.get(`/api`);
|
||||||
|
|
||||||
|
expect(res.status).toBe(200);;
|
||||||
|
expect(res.data).toEqual({ message: 'Hello API' });
|
||||||
|
});
|
||||||
|
})
|
||||||
@ -7,4 +7,5 @@ export interface Schema {
|
|||||||
linter?: 'eslint' | 'none';
|
linter?: 'eslint' | 'none';
|
||||||
formatFile?: boolean;
|
formatFile?: boolean;
|
||||||
rootProject?: boolean;
|
rootProject?: boolean;
|
||||||
|
isNest?: boolean;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -39,6 +39,13 @@
|
|||||||
"enum": ["eslint", "none"],
|
"enum": ["eslint", "none"],
|
||||||
"default": "eslint"
|
"default": "eslint"
|
||||||
},
|
},
|
||||||
|
"isNest": {
|
||||||
|
"description": "Is the E2E server project nest",
|
||||||
|
"type": "boolean",
|
||||||
|
"default": false,
|
||||||
|
"hidden": true,
|
||||||
|
"x-priority": "internal"
|
||||||
|
},
|
||||||
"rootProject": {
|
"rootProject": {
|
||||||
"description": "Create node application at the root of the workspace.",
|
"description": "Create node application at the root of the workspace.",
|
||||||
"type": "boolean",
|
"type": "boolean",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user