Skip to content

Commit

Permalink
feat(examples): add nestjs test
Browse files Browse the repository at this point in the history
  • Loading branch information
Fabian Wiles authored and alexeagle committed Jan 6, 2020
1 parent d48f237 commit f448931
Show file tree
Hide file tree
Showing 7 changed files with 1,025 additions and 18 deletions.
3 changes: 2 additions & 1 deletion examples/BUILD.bazel
Expand Up @@ -133,11 +133,12 @@ example_integration_test(
example_integration_test(
name = "examples_nestjs",
bazel_commands = [
"build ...",
"test ...",
# Test cross-platform build
"build --platforms=@build_bazel_rules_nodejs//toolchains/node:linux_amd64 //src:docker",
],
npm_packages = {
"//packages/jasmine:npm_package": "@bazel/jasmine",
"//packages/typescript:npm_package": "@bazel/typescript",
},
owners = [
Expand Down
10 changes: 8 additions & 2 deletions examples/nestjs/package.json
@@ -1,19 +1,25 @@
{
"private": true,
"dependencies": {
"@bazel/bazel": "^2.0.0",
"@bazel/ibazel": "^0.11.0",
"@bazel/jasmine": "^1.0.0",
"@nestjs/common": "6.5.2",
"@nestjs/core": "6.5.2",
"@nestjs/platform-express": "6.5.2",
"@types/jasmine": "^3.5.0",
"@types/supertest": "^2.0.8",
"minimist": "1.2.0",
"reflect-metadata": "0.1.13",
"rxjs": "6.5.2"
"rxjs": "6.5.2",
"supertest": "^4.0.2"
},
"devDependencies": {
"@bazel/typescript": "^1.0.1",
"@types/node": "12.6.3",
"typescript": "3.5.3"
},
"scripts": {
"test": "bazel build ... && bazel build --platforms=@build_bazel_rules_nodejs//toolchains/node:linux_amd64 //src:docker"
"test": "bazel test ... && bazel build --platforms=@build_bazel_rules_nodejs//toolchains/node:linux_amd64 //src:docker"
}
}
29 changes: 26 additions & 3 deletions examples/nestjs/src/BUILD.bazel
Expand Up @@ -14,20 +14,37 @@

package(default_visibility = ["//visibility:public"])

load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary")
load("@npm_bazel_jasmine//:index.bzl", "jasmine_node_test")
load("@npm_bazel_typescript//:index.bzl", "ts_library")

ts_library(
name = "app",
srcs = glob(["*.ts"]),
srcs = glob(
["*.ts"],
exclude = ["*.spec.ts"],
),
deps = [
"@npm//@nestjs/common",
"@npm//@nestjs/core",
"@npm//@nestjs/platform-express",
"@npm//@types/node",
"@npm//tslib",
],
)

load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary")
ts_library(
name = "test_lib",
srcs = glob(["*.spec.ts"]),
deps = [
":app",
"@npm//@nestjs/common",
"@npm//@types/jasmine",
"@npm//@types/supertest",
"@npm//jasmine",
"@npm//supertest",
],
)

# bazel run //src:server -- --port=4000
# TODO(gregmagolan): add test for nest server with protractor rule once it is brought in
Expand All @@ -37,12 +54,18 @@ nodejs_binary(
":app",
"@npm//@nestjs/common",
"@npm//@nestjs/core",
"@npm//@nestjs/platform-express",
"@npm//minimist",
],
entry_point = ":main.ts",
)

jasmine_node_test(
name = "test",
deps = [
":test_lib",
],
)

load("@io_bazel_rules_docker//nodejs:image.bzl", "nodejs_image")

# bazel build --platforms=@build_bazel_rules_nodejs//toolchains/node:linux_amd64 //src:docker
Expand Down
6 changes: 3 additions & 3 deletions examples/nestjs/src/app.controller.ts
Expand Up @@ -2,8 +2,8 @@ import {Controller, Get} from '@nestjs/common';

@Controller()
export class AppController {
@Get()
getGreeting(): string {
return 'Hello world!';
@Get('hello')
getGreeting(): {message: string} {
return {message: 'Hello world!'};
}
}
21 changes: 21 additions & 0 deletions examples/nestjs/src/main.spec.ts
@@ -0,0 +1,21 @@
import {INestApplication} from '@nestjs/common';
import * as request from 'supertest';

import {bootstrap} from './main';

describe('App', () => {
let server: INestApplication;

beforeAll(async () => {
server = await bootstrap(3000);
});
afterAll(async () => {
await server.close();
})

it(`GET /`, () => {
return request(server.getHttpServer()).get('/hello').expect(200).expect({
message: 'Hello world!'
});
});
});
8 changes: 5 additions & 3 deletions examples/nestjs/src/main.ts
@@ -1,12 +1,14 @@
import {Logger} from '@nestjs/common';
import {INestApplication, Logger} from '@nestjs/common';
import {NestFactory} from '@nestjs/core';
import {ExpressAdapter} from '@nestjs/platform-express';

import {AppModule} from './app.module';

async function bootstrap(port: number) {
const app = await NestFactory.create(AppModule);
export async function bootstrap(port: number): Promise<INestApplication> {
const app = await NestFactory.create(AppModule, new ExpressAdapter());
await app.listen(port);
Logger.log(`Application served at http://localhost:${port}`);
return app;
}

if (require.main === module) {
Expand Down

0 comments on commit f448931

Please sign in to comment.