¿Hay una manera conveniente de burlarse de los objetos HTTP Request and Response para middlewares de prueba de unidad?node.js: Mock http request and response
Respuesta
estoy usando simulacro nodejutsu:
https://github.com/nodejitsu/mock-request
Tal vez esto es lo que busca.
El proyecto está en desuso. La recomendación es usar "nock" https://github.com/flatiron/nock –
nock no funciona para restaurar solicitudes http. – Kevin
escribí una biblioteca para burlarse de las respuestas de las solicitudes realizadas a través de HTTP estándar o mediante el modelo de solicitud:
Parece que tanto https://github.com/howardabrams/node-mocks-http y https://github.com/vojtajina/node-mocks se puede utilizar para crear simulacro http.ServerRequest
y http.ServerResponse
objetos.
node-mocks-http parece una gran solución para la publicación original. – newz2000
Ok, habiéndome encontrado con esto, node-mocks-http es increíble. (En cuanto a la prueba de controladores de solicitudes sin realmente hacer solicitudes http) –
Desde la etiqueta, parece que esta pregunta es sobre Express. En ese caso, supertest es muy buena:
var request = require('supertest')
, express = require('express');
var app = express();
app.get('/user', function(req, res){
res.send(201, { name: 'tobi' });
});
request(app)
.get('/user')
.expect('Content-Type', /json/)
.expect('Content-Length', '20')
.expect(201)
.end(function(err, res){
if (err) throw err;
});
Para uso general Nodo, Flatiron Nock parece una buena opción:
var nock = require('nock');
var example = nock('http://example.com')
.get('/foo')
.reply(200, { foo: 'bar' });
var http = require('http');
var options = {
host: 'example.com',
port: 80,
path: '/foo',
method: 'GET'
}
var req = http.request(options, function(res) {
res.on('data', function(chunk) {
console.log('BODY: ' + chunk);
});
});
req.on('error', function(e) {
console.log('error: ' + e);
});
req.end();
Salida:
CUERPO: { "foo": "barra "}
+1 para nock, herramienta muy útil. – undefined
Esta es una publicación anterior. Pero tengo una pregunta. supertest, que tiene 'request (app)', parece iniciar un servidor (https://github.com/tj/supertest/blob/master/index.js#L20), y no se burla de los requisitos de http. ¿Es eso cierto? – NullSpace
Revisa https://github.com/timsavery/node-hmock o npm install hmock
... cualquier comentario ¡Bienvenido! La solución ha funcionado bien para mí hasta ahora.
Mockery se ve muy bien para esto.
Básicamente secuestra require
llamadas y devuelve un objeto/función diferente que especifique.
Lo invito a usar motty. ¿Por qué necesitamos otro código?
- 1. Nombre para HTTP Request + Response
- 2. Iphone Http request response using json
- 3. solicitud HTTP node.js utilizando 'request' de mikeal
- 4. Diferencia entre HttpContext.Current.Response/Request Y Page.Request/Response
- 5. JSON Zip Response en node.js
- 6. Copiando Http Request InputStream
- 7. Node.js Https request Error
- 8. node.js POST request
- 9. JAVA: http post request
- 10. Logging HttpRequest parameters and request body
- 11. Mock/Test Mongodb Database Node.js
- 12. HTTP 500 Response with Body?
- 13. 400 Bad Request HTTP Response utilizando un WCF POST a través de JQuery
- 14. http post request erlang
- 15. PHP SOAP HTTP Request
- 16. Http Request Life Cycle
- 17. Cómo manipular Session, Request y Response para test en play2.0
- 18. jQuery ajax request with json response, how to?
- 19. Spring MVC, force JSON response in plain request
- 20. Node.js and Redis Auth
- 21. Reading HTTP Request Headers personalizados
- 22. Android, Java: HTTP POST Request
- 23. Http Request - Bypass DNS [.Net]
- 24. HTTP Response 412: ¿puede incluir contenido?
- 25. Node.js http solicitud pipelining
- 26. Enviando encabezados HTTP con HTTP Web Request para autenticación NTLM
- 27. Parámetros múltiples en http get request
- 28. jQuery Get Request on HTTP URL
- 29. HTTP GET Request, ASP - ¡Estoy perdido!
- 30. Node.js http auth aut.
¿Hay algún motivo por el que no incluya solicitudes HTTP reales en su caso de prueba? Debería ser reallx factible en una configuración de prueba asíncrona. –
Fui con eso, pero para ser sincero, no parece una prueba de unidad, es más como una integración. De todos modos, hasta ahora esa es mi mejor opción. – 7elephant
No quiero incluir solicitudes http reales porque hace que mis pruebas sean más lentas y menos confiables. Por ejemplo, si uno de los servicios a los que llamo tiene respaldo de DB, y falla porque el DB en QA ha sido borrado (o sincronizado con prod, o lo que sea) entonces mis pruebas comienzan a fallar. Además, si no se burla, es casi imposible forzar de forma confiable ciertos casos de error. No, me gustan los simulacros: hacen que las pruebas sean más fáciles y confiables. – Kevin