javascript node.js request superagent nock

javascript - ¿Cómo pueden trabajar juntos Superagent y Nock?



node.js request (1)

Mi presunción es que Nock está respondiendo con application/json como tipo mime ya que está respondiendo con {yes: ''it works''} . Mira a res.body en Superagent. Si esto no funciona, házmelo saber y lo echaré un vistazo.

Editar:

Prueba esto:

var agent = require(''superagent''); var nock = require(''nock''); nock(''http://localhost'') .get(''/testapi.html'') .reply(200, {yes: ''it works !''}, {''Content-Type'': ''application/json''}); //<-- notice the mime type? agent .get(''http://localhost/testapi.html'') .end(function(res){ console.log(res.text) //can use res.body if you wish });

o...

var agent = require(''superagent''); var nock = require(''nock''); nock(''http://localhost'') .get(''/testapi.html'') .reply(200, {yes: ''it works !''}); agent .get(''http://localhost/testapi.html'') .buffer() //<--- notice the buffering call? .end(function(res){ console.log(res.text) });

Cualquiera de los dos funciona ahora. Esto es lo que creo que está pasando. nock no está configurando un tipo mime, y se asume el valor predeterminado. Supongo que el valor predeterminado es application/octet-stream . Si ese es el caso, Superagent entonces no amortigua la respuesta para conservar la memoria. Debes forzarlo para amortiguarlo. Es por eso que si especifica un tipo mime, el cual su servicio HTTP debería, de todos modos, Superagent sabe qué hacer con application/json y por qué, si puede usar res.text o res.body (JSON analizado).

En node.js, tengo problemas para hacer que Superagent y Nock trabajen juntos. Si uso solicitud en lugar de superagente, funciona perfectamente.

Aquí hay un ejemplo simple en el que Superagent no reporta los datos simulados:

var agent = require(''superagent''); var nock = require(''nock''); nock(''http://thefabric.com'') .get(''/testapi.html'') .reply(200, {yes: ''it works !''}); agent .get(''http://thefabric.com/testapi.html'') .end(function(res){ console.log(res.text); });

El objeto res no tiene propiedad ''texto''. Algo salió mal.

Ahora si hago lo mismo usando solicitud:

var request = require(''request''); var nock = require(''nock''); nock(''http://thefabric.com'') .get(''/testapi.html'') .reply(200, {yes: ''it works !''}); request(''http://thefabric.com/testapi.html'', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body) } })

El contenido simulado se muestra correctamente.

Usamos Superagent en las pruebas, así que prefiero quedarme con él. ¿Alguien sabe cómo hacer que funcione?

Muchas gracias xavier