2011-11-05 16 views
33

C'è un modo conveniente per deridere gli oggetti HTTP Request e Response per i middleware di test delle unità?node.js: Richiesta e risposta http Mock

+0

C'è un motivo per cui non includi richieste HTTP reali nel tuo caso di test? Dovrebbe essere reallx fattibile in una configurazione di prova asincrona. –

+9

Sono andato con quello, ma a dire il vero non sembra un test unitario, è più simile a quello dell'integrazione. Ad ogni modo, finora questa è la mia migliore opzione. – 7elephant

+4

Non voglio includere richieste HTTP reali perché rende i miei test più lenti e meno affidabili. Ad esempio, se uno dei servizi che chiamo è DB backed e fallisce perché il DB in QA è stato cancellato (o sincronizzato con prod, o qualsiasi altra cosa), i miei test iniziano a fallire. Inoltre, se non prendi in giro è quasi impossibile forzare in modo affidabile alcuni casi di errore. No, mi piacciono i mock: rendono i test più facili e affidabili. – Kevin

risposta

1

sto usando nodejutsu finto:

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

Forse questo è quello che state cercando.

+4

Il progetto è obsoleto. La raccomandazione è di usare "nock" https://github.com/flatiron/nock –

+3

nock non funziona per ristabilire le richieste http. – Kevin

7

Dal tag, sembra che questa domanda riguardi Express. In tal caso, supertest è molto buono:

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

Per uso generale Nodo, Flatiron Nock sembra una buona opzione:

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

uscita:

BODY: { "pippo": "bar "}

+0

+1 per cocca, strumento molto utile. – undefined

+1

Questo è un vecchio post. Ma ho una domanda. supertest, che ha 'richiesta (app)', sembra avviare un server (https://github.com/tj/supertest/blob/master/index.js#L20), e non sta prendendo in giro http reqeusts. È vero? – NullSpace

0

Mockery sembra perfetto per questo.

In sostanza dirotta le chiamate require e restituisce un oggetto/funzione stub diverso specificato.

0

Ti consiglio di utilizzare motty. perché abbiamo bisogno di un altro codice?

Problemi correlati