Spy/stub 路由内的请求(通过 chai.request)

Spy/stub a request inside a route (through chai.request)

问题

我有一个名为 /players 的端点,它向外部服务器发出 http 请求,我不希望在我的测试中执行该请求,但我不知道如何模拟在这种情况下。

密码

test/controllers/test-players.js

// ...

it('returns all players', done => {
  chai.request(app) // the content of app is not relevant
    .get('/players')
    .end((err, res) => {
      expect(err).to.not.exist
      expect(res.body.length).to.equal(3)

      done()
    })
})

// ...

controllers/players.js

const request = require('request')

module.exports = (req, res) => {
  request('http://externalendpoint.com', (error, request, body) => {
    res.json(body)
  })
}

详情

我正在使用:

想法?

我找到了解决办法。我刚刚使用 nock:

拦截了请求
const fixture = [{id: 1, name: 'User'}, {id: 2, name: 'Admin'}, {id: 3, name: 'Subadmin'}]

nock('https://domain.com')
  .get('/some-endpoint')
  .reply(200, {fixture})

it('returns all players', done => {
  chai.request(app) // the content of app is not relevant
    .get('/players')
    .end((err, res) => {
      expect(err).to.not.exist
      expect(res.body.length).to.equal(3)

      done()
    })
})