Я пытаюсь добавить некоторые шутливые тесты в мой проект typescipt для узла. Я хотел бы использовать supertest для вызова моего маршрутизатора koa, но также использовать fetch-mock для имитации запросов, выполняемых с использованием node-fetch.
Мое решение до сих пор ниже, но выборка в моем маршрутизаторе не использует настройку фиктивной выборки с fetch-mock. Модульный тест не пройден, потому что ожидаемый ответ, который я высмеял, не возвращается. Я пытался следовать документации для глобального извлечения выборки, но безуспешно, и машинописный текст мешает следовать найденным нетекстовым решениям. Я хотел бы по возможности избегать использования неглобальной песочницы, так как мне пришлось бы переписывать много кода, чтобы передать выборку.
server.spec.ts
import * as fetchMock from 'fetch-mock';
import * as request from 'supertest';
import server from './server';
afterEach(() => {
server.close();
fetchMock.reset();
});
describe('router', () => {
test('GET: should return data', async () => {
const expectedResponse = { test: 'TEST' };
fetchMock.get('https://myapi.com/test', expectedResponse);
const response = await request(server).get('/test');
expect(response.status).toEqual(200);
expect(response.body).toMatchObject(expectedResponse);
});
});
server.ts
import * as Koa from 'koa';
import * as Router from 'koa-router';
import fetch from 'node-fetch';
const app = new Koa();
const router = new Router();
router.get('/test', async (ctx) => {
const options = { method: 'GET' };
try {
const response = await fetch('https://myapi.com/test', options);
ctx.body = await response.json();
} catch (error) {
error.fetchUrl = url;
throw error;
}
});
app.use(router.routes());
const server = app.listen(3000);
export default server;