首页 > 解决方案 > 如何在nest js中实现守卫的集成测试?

问题描述

我想使用nest js(Jest JS)对警卫进行单元测试。我找不到太多文档。

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);
    });
  });

上面的代码将返回猫数组。我想为这个单元测试实施警卫。

标签: node.jsangularjsjestjsnestjs

解决方案


我找到了一个实现。我正在共享示例,它可能对某人有所帮助

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);
  });

推荐阅读