nestjs-mocha-decorators

Use test decorators to run your Nest.js test suite using mocha internally

Downloads
695
Stars
2
Committers
1

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 !

Package Rankings
Top 21.1% on Npmjs.org