Задействуйте API в реальном времени, но только отключите сервисный уровень (т.е.) запрос эластичного поиска к базе данных, скажем, (localhost:9200//). Как я могу обратиться к API, но только перехватить запрос elasticsearch к базе данных?
У меня есть несколько слоев, таких как уровень API и уровень обслуживания, а также уровень базы данных в моем проекте. Поэтому я использовал nock для имитации запросов на уровне API. Но я в основном хочу издеваться над данными, присутствующими на уровне сервиса elasticsearch, на уровне базы данных. Другими словами, уровень API должен работать с реальными обращениями, а уровень elasticsearch должен быть только отсканирован. Ожидаемый результат — это только имитация уровня elasticsearch, а не всего запроса и ответа API. Это фрагмент, который я использовал для имитации запроса и ответа на уровне API.
it('should return a user', () => { nock('https://randomuser.me') .get('/myapi/') .reply(200, { results: [{ name: 'Dovahkiin' }], }); return query .getQueryRequest() .then(res => res.results[0].name) .then(res => expect(res).toEqual('Dovahkiin')); });
Тестирование elasticsearch с nock в nodejs
Ответы (2)
Похоже, проблема связана с попыткой взломать локальный хост, он блокирует и/или имитирует другие запросы локального хоста, которые не направляются на порт 9200.
Если у меня есть на это право, вы можете использовать allowUnmocked< Параметр /a> при создании области nock вокруг локального хоста.
Из документов:
Если вам нужно, чтобы какой-то запрос с одним и тем же именем хоста был имитирован, а некоторые другие действительно проходили через стек HTTP, вы можете использовать параметр allowUnmocked.
nock('https://localhost:9200', { allowUnmocked: true })
.get('/somepath')
.reply(200, {
results: [{ name: 'Dovahkiin' }],
});
Порядок, в котором вы импортируете Nock, может сыграть важную роль. Например, у меня было следующее в моем собственном наборе:
const API = require('api')
const Nock = require('nock')
Моему API-модулю требовался Elasticsearch, и я не мог заставить Nock перехватывать запросы, которые делал модуль elasticsearch-js. Однако, после простого изменения порядка импорта, мой тест работал, как и ожидалось, поскольку Nock нужно переопределить http.request
и http.ClientRequest
до того, как библиотеки, которые их используют, будут запущены.
Надеюсь это поможет!