Issue
I have implemented a nice piece of middleware which checks a supplied query param against a regex, it calls next() if no issue or next(Error) if there is an issue.
export class ValidateRegistrationMiddleware implements NestMiddleware {
use(req: Request, res: Response, next: NextFunction){
let reg = new RegExp('^[A-Z0-9 _]*$');
if (reg.test(req.params.registration)) {
next()
} else {
next(new InvalidRegistrationException('Invalid Registration :' + req.params.registration, HttpStatus.BAD_REQUEST));
}
}
}
I get it to work by setting the configure inside the class of the module component.
@Module({
controllers: [MyController],
providers: [MyService]
})
export class MyModule implements NestModule {
configure(consumer: MiddlewareConsumer) {
consumer.apply(ValidateRegistrationMiddleware).forRoutes({
path: 'service/:registration',
method: RequestMethod.GET
})
}}
This works great, but I can't implement it and use it in my unit test of the controller it is working on. In my spec file I set up the module in the beforeEach, but I can't see where to setup the middleware. It is setup inside the module class not in the @Decorator in my actual module.
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [MyController],
providers: [MyService],
}).compile();
controller = module.get<MyController>(MyController);
service = module.get<MyService>(MyService);
});
How do I get the middleware to run before every test? I want to test an invalid reg but currently the middleware does not get called.
Solution
In the testing module, you reference providers and controllers however your middleware setup lives in MyModule
which is not specified anywhere.
If you import MyModule
instead I believe your middleware configuration will initialize.
Try this below
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [MyModule],
}).compile();
controller = module.get<MyController>(MyController);
service = module.get<MyService>(MyService);
});
Answered By - n1md7
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.