nestjs-mocha-decorators
v1.0.5
Published
Use test decorators to run your Nest.js test suite using mocha internally
Downloads
818
Maintainers
Readme
Nest.js Mocha Decorators
This library lets you use test decorators to create your test suite, with all these benefits
- You can create tests suites and tests using classes, instead of jest or mocha anonymous functions
- You can inject your components in your tests, instead of using app.get(Component to use)
- You can use inheritance
- You can pick which test or suite you want to run
Example
```
@TestSuite('Demo Test Suite')
export class DemoTest {
@Inject()
private readonly httpService: HttpService
@Test('Get Test')
async testGet(): Promise<void> {
const { data } = await firstValueFrom(this.httpService.get('http://localhost:4343/demo'))
expect(data).toBe('Hello, Test world !')
}
}
```
Installation
Install with npm globally: ( as a development dependency because it will be use for tests only )
npm i --save-dev nestjs-mocha-decorators
Configuration
Its better with an example.
- Add your tests entry point in test directory ( test/test.entrypoint.ts )
import { HttpModule } from '@nestjs/axios';
import { ConsoleLogger, INestApplication } from '@nestjs/common';
import { Test, TestingModule, TestingModuleBuilder } from '@nestjs/testing';
import { MochaTestModule, MochaTestService } from '../src'; // Change this to import { MochaTestModule, MochaTestService } from 'nestjs-mocha-decorators'
import { DemoTest } from './tests/demo.test';
import { YourAppModule } from './your-app/your-app.module';
import { run } from 'mocha';
const initNest = async (): Promise<INestApplication> => {
const testingModuleBuilder: TestingModuleBuilder = await Test.createTestingModule({
imports: [
YourAppModule, // The app to test
MochaTestModule.registerTests([DemoTest], [HttpModule]) // Your test suite
],
})
const testingModule: TestingModule = await testingModuleBuilder.compile();
const app = testingModule.createNestApplication();
app.useLogger(new ConsoleLogger());
app.listen(4343)
return app
}
(async (): Promise<void> => {
const app = await initNest();
app.get(MochaTestService).declareTests()
run();
})();
- Add this line to your package.json
"test": "mocha --delay --exit --require ts-node/register --require tsconfig-paths/register test/test.entrypoint.ts"
- Start coding your tests
import { HttpService } from "@nestjs/axios";
import { Inject } from "@nestjs/common";
import { firstValueFrom } from "rxjs";
import { Test, TestSuite } from "../../src";
import expect from 'expect'
@TestSuite('Demo Test Suite')
export class DemoTest {
@Inject()
private readonly httpService: HttpService
@Test('Get Test')
async testGet(): Promise<void> {
const { data } = await firstValueFrom(this.httpService.get('http://localhost:4343/demo'))
expect(data).toBe('Hello, Test world !')
}
}
- Run all your tests with:
npm run test
- If you want to run the tests of a single class ( suite ), you can:
SUITETORUN="Demo Test Suite" npm run test
- Or, perhaps you want to run a single test, with:
TESTTORUN="Get Test" npm run test
Comments, suggestions and more
Creating a ticket on github can be very annoying ... send me your comments, problems and suggestions to [email protected]
Best !