gpt4 book ai didi

node.js - Nock 不适用于一起运行的多个测试

转载 作者:搜寻专家 更新时间:2023-10-31 22:49:19 45 4
gpt4 key购买 nike

我正在使用 nock 库来 stub 我的 http 调用。不同的测试文件 require('nock') 并进行 stub 。如果每个测试单独运行,则所有测试都通过。但是,如果所有测试一起运行,后面的测试将失败因为发出的不是 nock,而是实际请求

Consider below code snippet for example. It has two different describe blocks, each with multiple test cases. If I run this file node node_modules/mocha/bin/_mocha test.js then the first two tests will pass, but the third test (in different describe block) would fail because it would actually call the google URL.

/* eslint-env mocha */

let expect = require('chai').expect
let nock = require('nock')
let request = require('request')

let url = 'http://localhost:7295'

describe('Test A', function () {
after(function () {
nock.restore()
nock.cleanAll()
})

it('test 1', function (done) {
nock(url)
.post('/path1')
.reply(200, 'input_stream1')

request.post(url + '/path1', function (error, response, body) {
expect(body).to.equal('input_stream1')
done()
})
})

it('test 2', function (done) {
nock(url)
.post('/path2')
.reply(200, 'input_stream2')

request.post(url + '/path2', function (error, response, body) {
expect(body).to.equal('input_stream2')
done()
})
})
})

// TESTS IN THIS BLOCK WOULD FAIL!!!
describe('Test B', function () {
after(function () {
nock.restore()
nock.cleanAll()
})

it('test 3', function (done) {
nock('http://google.com')
.post('/path3')
.reply(200, 'input_stream3')

request.post('http://google.com' + '/path3', function (error, response, body) {
expect(body).to.equal('input_stream3')
done()
})
})
})

有趣的是,如果我执行 console.log(nock.activeMocks()),那么我可以看到 nock 确实注册了要模拟的 URL。

[ 'POST http://google.com:80/path3' ]

最佳答案

如本 Github Issue 中所讨论, nock.restore() 删除 http 拦截器本身。当您在调用 nock.restore() 后运行 nock.isActive() 时,它将返回 false。所以你需要在再次使用它之前运行 nock.activate()

解决方案一:

删除 nock.restore()

方案二:

在您的测试中使用此 before() 方法。

  before(function (done) {
if (!nock.isActive()) nock.activate()
done()
})

关于node.js - Nock 不适用于一起运行的多个测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46801001/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com