Как настроить fetch-mock с помощью node-fetch, supertest и typcript - PullRequest
0 голосов
/ 24 июня 2019

Я пытаюсь добавить некоторые шутливые тесты в мой проект 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;
...