【发布时间】:2016-04-06 23:41:41
【问题描述】:
我正在使用mocha、gulp-jsx-coverage 和gulp-mocha 运行我的测试套件。我所有的测试都按预期运行并通过/失败。但是,我正在测试的一些模块通过 superagent 库向我的 API 发出 HTTP 请求。
在开发过程中,我还在localhost:3000 与我的客户端应用程序一起运行我的 API,这就是我的客户端测试试图访问的 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)
我尝试在全局帮助器中对 superagent(别名为 request)库中的所有方法进行存根,如下所示:
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方法以某种方式变得未存根
标签: javascript unit-testing gulp mocha.js