промежуточное ПО должно быть функцией для паспортного тестирования коа с использованием jest typcript - PullRequest
0 голосов
/ 29 марта 2020

Несколько проблем при попытке смоделировать поток oauth2 с использованием passport и koa ...

Ошибка при запуске теста:

  TypeError: middleware must be a function!

  26 |   app.use(bodyParser());
> 27 |   app.use(authRouting as any);
     |       ^

auth.ts:

import { KoaPassport } from 'koa-passport';
import * as Router from 'koa-router';

import { signAccessToken } from '../utils/jwt';

export function createAuthRoutes(passport: InstanceType<typeof KoaPassport>) {
  const router = new Router();

  router.get('/api/login', passport.authenticate('oauth2'));

  router.get('/api/authorize', passport.authenticate('oauth2'), (ctx: any) => {

    const {accessToken} = ctx.session.passport.user;

    const signedAccessToken = signAccessToken({accessToken});

    ctx.body = {token: signedAccessToken};
    ctx.status = 200;
  });

  return router;
}

Возможно, я неправильно строю экспортированную функцию createAuthRoutes() в моем тесте?

auth.spe c .ts:

import { Server } from 'http';
import * as Koa from 'koa';
import * as bodyParser from 'koa-bodyparser';
import * as supertest from 'supertest';
import * as passport from 'passport';
import { createAuthRoutes } from './auth';

const mockedPassport = passport as jest.Mocked<typeof passport>;

const authRouting = createAuthRoutes(mockedPassport as any);


describe.only('Auth routes', () => {
  let server: Server;
  let request: supertest.SuperTest<supertest.Test>;
  let response: supertest.Response;

  const app = new Koa();

  app.use(bodyParser());
  app.use(authRouting as any);

  console.log('authRouting', authRouting);

  beforeAll(() => {
    server = app.listen();
    request = supertest(server);
  });

  afterAll(() => {
    server.close();
  });

  // it('should return a signed access token for authorize', async () => {});

});

Несколько областей, в которых я не уверен (которые, вероятно, виноваты):

  1. Как макет createAuthRoutes в тесте ... правильно ли я его расширяю?
  2. Должен ли я издеваться над app.use ()?
  3. Это правильный макет паспорта?

Я действительно застрял на этом и был бы очень признателен за помощь!

...