Несколько проблем при попытке смоделировать поток 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 () => {});
});
Несколько областей, в которых я не уверен (которые, вероятно, виноваты):
- Как макет createAuthRoutes в тесте ... правильно ли я его расширяю?
- Должен ли я издеваться над app.use ()?
- Это правильный макет паспорта?
Я действительно застрял на этом и был бы очень признателен за помощь!