我正在使用nock,并试图删除某些主机名的拦截器。
我试过使用:
nock.removeInterceptor({
hostname: 'somehostname.com',
proto: 'https',
path: '/',
}),当我打印结果时,它实际上给了我真实的答案。
我也尝试过:
const mock = nock(somehostname.com)
.persist()
.post('/endpoint')
.reply(200);
nock.removeInterceptor(mock)但这给了我某种虚假的感觉。
我检查这是否有效的方法是打印activeMocks:nock.activeMocks(),并且它仍然有我正在尝试删除的拦截器。
有人知道会发生什么吗?
发布于 2020-01-23 18:52:16
我遇到了同样的问题,我就这样解决了:
const mock = nock(somehostname.com)
.persist()
.post('/endpoint')
.reply(200);
nock.removeInterceptor(mock.interceptors[0])mock.interceptors是为该作用域注册的所有Interceptor对象的数组,因此我获得了最近创建的作用域,并将其从nock中删除。
发布于 2020-10-19 09:23:26
看起来,nock在下面使用单例,调用nock("my/base-route/i/already/mocked")返回范围,然后通过使用scope.get("my/endpoint/I/already/mocked")来再次查询拦截器,后者返回拦截器。然后,可以使用nock.removeInterceptor(interceptor)删除该拦截器,该拦截器应该返回true。
因此,总共:
function mockRoute() {
nock("my/base-route/i/already/mocked")
.get("my/endpoint/I/already/mocked")
.reply("Something")
}
function removeExistingMock(): boolean {
const scope = nock("my/base-route/i/already/mocked")
const interceptor = scope.get("my/endpoint/I/already/mocked")
return nock.removeInterceptor(interceptor)
}发布于 2021-04-16 17:24:16
这对我起了作用:
nock.removeInterceptor({
proto: 'https',
hostname: 'www.somehostname.com',
path: `/somepath`,
})它确实需要一些尝试和错误,看看代码,以获得正确的选择。它看起来非常类似于您的代码,所以我所能看到的唯一不同之处就是包含了子域和完整路径。
请注意,删除拦截器并不会移除模拟本身。也就是说,请求将失败,而不是被允许通过实际的url。
我发现布尔返回值没有帮助。即使没有删除拦截器,它也可以返回true。我创建了一个关于那个的问题。
https://stackoverflow.com/questions/57073358
复制相似问题