web-dev-qa-db-fra.com

node.js: Mock demande http et réponse

Existe-t-il un moyen pratique de simuler les objets Requête HTTP et Réponse pour les middlewares de tests unitaires?

34
7elephant

Cela ressemble à la fois https://github.com/howardabrams/node-mocks-http et https://github.com/vojtajina/node-mocks peut être utilisé pour créer un simulacre http.ServerRequest et http.ServerResponse objets.

25
mjs

D'après l'étiquette, il semble que cette question concerne Express. Dans ce cas, supertest est très bon:

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;
  });

Pour un usage général des nœuds, Flatiron Nock ressemble à une bonne option:

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();

Sortie:

CORPS: {"foo": "bar"}

7
Rich Apodaca

j'utilise nodejutsu mock:

https://github.com/nodejitsu/mock-request

Peut-être que c'est ce que vous recherchez.

1
Tereska

J'ai écrit une bibliothèque pour simuler les réponses des requêtes effectuées via HTTP standard ou via le modèle de requête: 

https://github.com/ctide/fakeweb

1
ctide

Consultez https://github.com/timsavery/node-hmock ou npm install hmock... tout commentaire est le bienvenu! La solution a bien fonctionné pour moi jusqu'à présent.

0
timsavery

Je vous encourage à utiliser motty . pourquoi avons-nous besoin d'un autre code?

0
Notice

Mockery semble très bien pour cela. 

Essentiellement, il pirate les appels require et renvoie un autre stub d'objet/fonction que vous spécifiez.

0
Ed Hinchliffe