ejemplos domain javascript mocha fetch nock

javascript - domain - URL relativa como nombre de host en Nock



title js (5)

Acabo de hacer una pregunta similar en el repositorio de Nock. Aparentemente esto no es compatible: https://github.com/pgte/nock/issues/431

Necesito simular las solicitudes HTTP del lado del cliente. Estoy usando isomorphic-fetch en el lado del cliente y estoy usando mocha y nock para probar y burlarse. Todas mis solicitudes de cliente se basan en la ruta relativa. Debido a esto no puedo proporcionar el nombre de host para el nock . ¿Hay algún trabajo alrededor?

Lado del cliente:

fetch(''/foo'') //hostname: http://localhost:8080 .then(res => res.json()) .then(data => console.log(data)) .catch(e => console.log(e))

Banco de pruebas

nock(''/'') .get(''/foo'') .reply(200, {data: "hello"})

Esto está fallando porque no estoy dando el nombre de host adecuado para el nock . ¿Estoy haciendo algo mal?


Encontré una solución para esto. Tenga un _ajax-setup.js en su carpeta de prueba

import $ from ''jquery'' $(document).ajaxSend((event, jqxhr, settings) => { settings.url = ''http://0.0.0.0'' + settings.url; })

Lo que hay que tener en cuenta es que este archivo debe ejecutarse primero y solo una vez . Tenerlo como un archivo solo se ejecuta una vez y _ antes de que lo haga alfabéticamente primero.

Más tarde puedes probar tu código con

nock(''http://0.0.0.0'') .get(''/foo'') .reply(200, {data: "hello"})


La respuesta de kudresov a la pregunta de liorbauer describe una solución específica de Jest.

Pon esto en __mocks __ / isomorphic-fetch.js:

const fetch = require.requireActual(''isomorphic-fetch''); module.exports = (url, config) => { return fetch(''https://localhost'' + url, config); };

Luego, Jest reemplaza automáticamente todos los requisitos (o importaciones) para este módulo de nodo.

En otros marcos de prueba podrías usar algo como rewire


Para axios agregué los siguientes a mi archivo de prueba. Esto ayudó a superar esta limitación.

axios.defaults.baseURL=''http://localhost:4000/'';

Tenga en cuenta que esta es una variable global. Con esto, el código real puede vivir con una URL relativa y no es necesario verificar el indicador de prueba en él.


Para cualquier persona interesada: en mi proyecto de reacción / webpack, resolví esto antes de ir a buscar url con '' http: // localhost '' cuando NODE_ENV está configurado como ''test'' .

ejemplo:

const testing = process.env.NODE_ENV === ''test''; const apiUrl = `${testing ? ''http://localhost'' : ''''}/api`; function getStuffFromApi() { return fetch(apiUrl, ...) }

De esta manera, en mi prueba siempre puedo usar nock así:

nock(''http://localhost'') .get(''/api'') .reply(200, {data: ''hello''})

NOTA : Al ejecutar mis pruebas, NODE_ENV se establece en ''probar''