Я запускаю свой тестовый набор, используя mocha
, через gulp-jsx-coverage
и gulp-mocha
. Все мои тесты выполняются и проходят/сбой, как и ожидалось. Тем не менее, некоторые из моих тестируемых модулей делают HTTP-запросы к моему API через библиотеку superagent
.Ошибка в тестовом наборе Mocha при попытке подключения к API
При разработке я также запускаю свой API по адресу localhost:3000
рядом с моим клиентским приложением, и поэтому это URL-адрес, который пытается получить мой клиентский тест. Однако при тестировании API обычно не работает. Это приводит к следующей ошибке в любое время запрос проходит через:
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)
Я попытался гася всеми методы на (псевдонимы, как request
) библиотеках superagent
в глобальном помощнике, например, так:
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();
});
Но по какой-то причине, когда некоторые тесты встречаются, методы не обрезаются, и поэтому я достигаю ошибки ECONNREFUSED
. Я проверил трижды, и нет, где я восстанавливаю песочницу или любые заглушки.
Есть ли способ исправить проблему, с которой я столкнулся, или более чистое решение для этого в целом?
Является ли поведение детерминированной?Вы пишете, что проблемы возникают для «некоторых тестов» - всегда ли это один и тот же набор тестов, которые терпят неудачу или какой-то тест может пройти в одном тестовом прогоне, а другой - в другом? –
@TomasKulich он не терпит неудачу в одном и том же тесте каждый раз, но он не работает в определенном подмножестве тестов. Это просто потому, что это те тесты, действия которых в конечном итоге приводят к вызовам API. Если я запустил один тестовый файл, который ранее был ошибочным, он прошел бы. Кажется, что это происходит только при запуске всего пакета, по-видимому, из-за того, что методы 'request' каким-то образом становятся нераскрытыми. – Jakemmarsh