首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用nock删除拦截器

无法使用nock删除拦截器
EN

Stack Overflow用户
提问于 2019-07-17 10:04:11
回答 3查看 1.9K关注 0票数 2

我正在使用nock,并试图删除某些主机名的拦截器。

我试过使用:

代码语言:javascript
复制
nock.removeInterceptor({
      hostname: 'somehostname.com',
      proto: 'https',
      path: '/',
    }),

当我打印结果时,它实际上给了我真实的答案。

我也尝试过:

代码语言:javascript
复制
const mock = nock(somehostname.com)
    .persist()
    .post('/endpoint')
    .reply(200);

nock.removeInterceptor(mock)

但这给了我某种虚假的感觉。

我检查这是否有效的方法是打印activeMocks:nock.activeMocks(),并且它仍然有我正在尝试删除的拦截器。

有人知道会发生什么吗?

EN

回答 3

Stack Overflow用户

发布于 2020-01-23 18:52:16

我遇到了同样的问题,我就这样解决了:

代码语言:javascript
复制
const mock = nock(somehostname.com)
    .persist()
    .post('/endpoint')
    .reply(200);

nock.removeInterceptor(mock.interceptors[0])

mock.interceptors是为该作用域注册的所有Interceptor对象的数组,因此我获得了最近创建的作用域,并将其从nock中删除。

票数 5
EN

Stack Overflow用户

发布于 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

因此,总共:

代码语言:javascript
复制
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)
}
票数 3
EN

Stack Overflow用户

发布于 2021-04-16 17:24:16

这对我起了作用:

代码语言:javascript
复制
nock.removeInterceptor({
  proto: 'https',
  hostname: 'www.somehostname.com',
  path: `/somepath`,
})

它确实需要一些尝试和错误,看看代码,以获得正确的选择。它看起来非常类似于您的代码,所以我所能看到的唯一不同之处就是包含了子域和完整路径。

请注意,删除拦截器并不会移除模拟本身。也就是说,请求将失败,而不是被允许通过实际的url。

我发现布尔返回值没有帮助。即使没有删除拦截器,它也可以返回true。我创建了一个关于那个的问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57073358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档