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
risposta
sto usando nodejutsu finto:
https://github.com/nodejitsu/mock-request
Forse questo è quello che state cercando.
Il progetto è obsoleto. La raccomandazione è di usare "nock" https://github.com/flatiron/nock –
nock non funziona per ristabilire le richieste http. – Kevin
ho scritto una biblioteca per prendere in giro le risposte a richieste effettuate tramite HTTP standard o tramite il modello di richiesta:
Sembra che sia https://github.com/howardabrams/node-mocks-http e https://github.com/vojtajina/node-mocks può essere utilizzato per creare finto http.ServerRequest
e http.ServerResponse
oggetti.
node-mocks-http sembra un'ottima soluzione per il post originale. – newz2000
Ok, avendo appena scoperto questo, il nodo-mock-http è sorprendente. (Per quanto riguarda testare i gestori delle richieste senza effettuare effettivamente richieste http) –
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 "}
Check out https://github.com/timsavery/node-hmock o npm install hmock
... qualsiasi feedback benvenuto! La soluzione ha funzionato bene per me finora.
Mockery sembra perfetto per questo.
In sostanza dirotta le chiamate require
e restituisce un oggetto/funzione stub diverso specificato.
Ti consiglio di utilizzare motty. perché abbiamo bisogno di un altro codice?
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. –
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
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