@devniel/nestjs-typeorm-testing
v0.1.5-alpha
Published
Typeorm testing module, initially for testing @BeforeInsert hook.
Downloads
15
Readme
Typeorm Testing module for NestJS, with this module you don't need an access to DB to test the BeforeInsert hook of typeorm entities.
Based on https://github.com/typeorm/typeorm/issues/1267#issuecomment-456200490 and some debugging/reading of the typeorm and @nestjs/typeorm flow.
Created with https://github.com/nestjsplus/nestjs-package-starter.
Install:
npm install --save-dev @devniel/nestjs-typeorm-testing
Example of use:
Invoke TypeOrmTestModule.forTest
and pass as an argument an array with the entities used in the app.
By now it will create fake queries against a fake postgresql database connection.
If your entity (e.g. User
) has hooks like @BeforeInsert()
, the testing module will invoke it just like a regular typeorm module when using the injected repository in the proper services.
import { TypeOrmTestModule } from '@devniel/nestjs-typeorm-testing';
const module: TestingModule = await Test.createTestingModule({
controllers: [AuthResolver],
imports: [TypeOrmTestModule.forTest([User])],
providers: [
AuthService,
UsersService,
{
provide: JwtService,
useValue: jwtServiceMock,
},
{
provide: RedisService,
useValue: redisServiceMock,
},
],
}).compile();
Custom connection name
To provide a custom connection name, then set the first argument of forTest
as an options object.
import { TypeOrmTestModule } from '@devniel/nestjs-typeorm-testing';
const module: TestingModule = await Test.createTestingModule({
controllers: [AuthResolver],
imports: [TypeOrmTestModule.forTest({
entities: [User],
name: 'default2'
})],
providers: [
AuthService,
UsersService,
{
provide: JwtService,
useValue: jwtServiceMock,
},
{
provide: RedisService,
useValue: redisServiceMock,
},
],
}).compile();
Getting the fake connection
You can get the created fake connection and check its properties or close it.
import { TypeOrmTestModule } from '@devniel/nestjs-typeorm-testing';
import { getConnectionToken } from '@nestjs/typeorm';
const module: TestingModule = await Test.createTestingModule({
controllers: [AuthResolver],
imports: [TypeOrmTestModule.forTest({
entities: [User],
name: 'default2'
})]
}).compile();
const connection = module.get(getConnectionToken('default2'));
connection.close(); // module.close() also closes the connection
Todo:
- Capture queries.
- Create utils to override the repositories with ease.
License
Licensed under the MIT License - see the LICENSE file for details.