Reputation:
I want to implement unit testing for guards using nest js(Jest JS). I could nt find much documentation.
import {Test, TestingModule} from '@nestjs/testing';
import {CatsController} from '../src/modules/cats/cats.controller';
import {CatsService} from '../src/modules/cats/cats.service';
import {ICat} from '../src/modules/cats/interfaces/ICat';
import {JwtStrategy} from '../src/strategy/AppId.strategy';
beforeEach(async () => {
const module = await Test.createTestingModule({
controllers: [CatsController],
providers: [CatsService],
}).compile();
catsService = module.get<CatsService>(CatsService);
catsController = module.get<CatsController>(CatsController);
});
describe('findAll', () => {
it('should return an array of cats', async () => {
// const appIdAuthContext: AppIDAuthToken = tokenInfo;
const result: ICat = {
name: 'test',
age: 1,
breed: 'one'
};
jest.spyOn(catsService, 'findAll').mockImplementation(() => result);
console.log(result);
console.log(catsController.findAll());
expect(await catsController.findAll()).toBe(result);
});
});
The above code will return array of cats. i want to implement guards for this unit test.
Upvotes: 3
Views: 5004
Reputation:
I have found an implementation.i'm sharing the sample , it may help somebody
function createTestModule() {
return Test.createTestingModule({
imports: [
PassportModule.register({defaultStrategy: 'jwt'}), CatsModule
],
controllers: [
AppController
],
providers: [
AppService, RoleGuard, JwtStrategy
],
exports: [PassportModule]
}).compile();
}
beforeEach(async () => {
const module = (await createTestModule(
));
app = module.createNestApplication();
server = app.getHttpServer();
await app.init();
});
it('Should create cat for admin', async () => {
return await request(server)
.post('/cats/createcat')
.set('Authorization', catAdminToken)
.set('Accept', 'application/json')
.send(catDto)
.expect(201);
});
Upvotes: 2