Sto eseguendo la mia suite di test utilizzando mocha
, tramite gulp-jsx-coverage
e gulp-mocha
. Tutti i miei test funzionano e passano/falliscono come previsto. Tuttavia, alcuni dei miei moduli testati eseguono richieste HTTP alla mia API tramite la libreria superagent
.Mocha test suite che emette errori quando si tenta di connettersi all'API
In fase di sviluppo, eseguo anche la mia API allo localhost:3000
insieme alla mia app lato client, quindi l'URL a cui i test sul lato client stanno tentando di accedere. Durante il test, tuttavia, l'API di solito non è in esecuzione. Il risultato è il seguente errore in qualsiasi momento una richiesta ottiene attraverso:
Error in plugin 'gulp-mocha'
Message:
connect ECONNREFUSED
Details:
code: ECONNREFUSED
errno: ECONNREFUSED
syscall: connect
domainEmitter: [object Object]
domain: [object Object]
domainThrown: false
Stack:
Error: connect ECONNREFUSED
at exports._errnoException (util.js:746:11)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:983:19)
Ho provato spegnendo tutti i metodi sul (alias come request
) biblioteca superagent
in un aiuto globale, in questo modo:
function httpStub() {
return {
withCredentials:() => {
return { end:() => {} };
}
};
};
beforeEach(function() {
global.sandbox = sinon.sandbox.create();
global.getStub = global.sandbox.stub(request, 'get', httpStub);
global.putStub = global.sandbox.stub(request, 'put', httpStub);
global.patchStub = global.sandbox.stub(request, 'patch', httpStub);
global.postStub = global.sandbox.stub(request, 'post', httpStub);
global.delStub = global.sandbox.stub(request, 'del', httpStub);
});
afterEach(function() {
global.sandbox.restore();
});
Ma per qualche motivo, quando si verificano alcuni test, i metodi non vengono cancellati e quindi raggiungo l'errore ECONNREFUSED
. Ho triplicato il controllo e no dove sto ripristinando la sandbox o altri stub.
C'è un modo per risolvere il problema che sto incontrando o una soluzione più pulita per questo?
è il comportamento deterministico?Stai scrivendo che i problemi si verificano per "alcuni test" - è sempre lo stesso insieme di test che falliscono o che un determinato test può passare in un test-run e fallire nell'altro? –
@TomasKulich non fallisce sullo stesso test ogni volta, ma fallisce all'interno di un certo sottoinsieme di test. Questo è solo perché questi sono i test le cui azioni alla fine si tradurranno in chiamate all'API. Se eseguo un singolo file di test che in precedenza era stato cancellato, sarebbe passato. Sembra che si verifichi solo quando si esegue l'intera suite, presumibilmente a causa dei metodi 'request' che in qualche modo diventano non citati – Jakemmarsh