supertest:ECONNRESET如果运行超过10个测试

时间:2016-02-25 15:06:32

标签: node.js mocha hapijs supertest

我正在尝试测试hapi.js提供的api。

我选择摩卡,应该和超级。

问题是:每次测试和每个测试组合都可以工作,只要调用不超过10个测试。 如果调用超过10个,则hapi.js会发出此错误:

Debug: connection, client, error
  Error: read ECONNRESET
  at exports._errnoException (util.js:856:11)
  at TCP.onread (net.js:544:26)

和摩卡这一个:

Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test.
 at null.<anonymous> (C:\Users\alex\apflora_api\node_modules\mocha\lib\runnable.js:215:19)

我正在使用此代码(摘录):

'use strict'

const supertest = require('supertest')
const should = require('should')
const appPassFile = require('../appPass.json')

const server = supertest.agent('http://127.0.0.1:4001')

global.describe('/adressen', function () {
  global.it('should return more than 140 rows', function (done) {
    server
      .get('/adressen')
      .end((err, res) => {
        if (err) throw err
        res.body.length.should.be.above(140)
        done()
      })
  })
})

global.describe('/anmeldung', function () {
  global.it('should accept known user', function (done) {
    const name = appPassFile.user
    const pwd = appPassFile.pass
    server
      .get(`/anmeldung/name=${name}/pwd=${pwd}`)
      .end((err, res) => {
        if (err) throw err
        res.status.should.equal(200)
        res.body.length.should.equal(1)
        done()
      })
  })
  global.it('should not accept unknown user', function (done) {
    server
      .get('/anmeldung/name=whoami/pwd=dontknow')
      .end((err, res) => {
        if (err) throw err
        res.status.should.equal(200)
        res.body.length.should.equal(0)
        done()
      })
  })
})

到目前为止,我已经尝试过这个来解决问题:

1个套接字数量

const http = require('http')
http.globalAgent.maxSockets = Infinity

这没有影响力。

2以不同方式获取服务器

const app = require('../server.js')
app.address = () => '127.0.0.1:4001'
global.describe('hooks', function () {
  global.before(function () {
    app.start(function (err) {
      if (err) throw err
      console.log('Server running at:', app.info.uri)
    })
  })
})

const server = supertest('http://127.0.0.1:4001')

这会产生相同的错误。

3使用

supertest('http://127.0.0.1:4001')

而不是

supertest.agent('http://127.0.0.1:4001')

这没有影响力。

每次测试都以完成回调结束。

我的印象是supertest意味着与express.js一起使用。但我还没有找到更好的解决方案。

非常感谢帮助。

0 个答案:

没有答案