我正在使用nock,并且正在尝试删除某些主机名的拦截器。
我尝试使用:
nock.removeInterceptor({
hostname: 'somehostname.com',
proto: 'https',
path: '/',
}),
当我打印结果时,它实际上给了我 true
我也尝试过:
const mock = nock(somehostname.com)
.persist()
.post('/endpoint')
.reply(200);
nock.removeInterceptor(mock)
但这以某种方式给了我 false 。
我检查此方法是否有效的方法是打印activeMocks:
nock.activeMocks()
而且仍然有我要删除的拦截器。
有人知道会发生什么吗?
答案 0 :(得分:4)
我遇到了同样的问题,我这样解决了:
CMDER_ROOT=%CMDER_ROOT%
const mock = nock(somehostname.com)
.persist()
.post('/endpoint')
.reply(200);
nock.removeInterceptor(mock.interceptors[0])
是为此作用域注册的所有Interceptor对象的数组,因此我获得了最新创建的作用域并将其从nock删除。
答案 1 :(得分:0)
似乎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)
}
。
总共:
library(data.table)
df <- data.table(abc = rep(1:5,2), xyz = c(rep(1, 5), rep(2, 5)))#
library(Rcpp)
cppFunction("
NumericVector foo(const NumericVector xyz) {
double n = xyz.length();
NumericVector res(n);
res[0] = 0.25 * xyz[0];
for (double i = 1; i < n; ++i) {
res[i] = 0.25 * xyz[i] + 0.75 * res[i-1];
}
return res;
}
")
df[, q1 := foo(xyz), by = rleid(cumprod(c(0, diff(abc))))]
abc xyz q1
# 1: 1 1 0.2500000
# 2: 2 1 0.4375000
# 3: 3 1 0.5781250
# 4: 4 1 0.6835938
# 5: 5 1 0.7626953
# 6: 1 2 0.5000000
# 7: 2 2 0.8750000
# 8: 3 2 1.1562500
# 9: 4 2 1.3671875
#10: 5 2 1.5253906
答案 2 :(得分:0)
这对我有用:
nock.removeInterceptor({
proto: 'https',
hostname: 'www.somehostname.com',
path: `/somepath`,
})
确实需要一些反复试验并查看代码才能获得正确的选项。它看起来与您的代码非常相似,因此我能看到的唯一可能的区别是包含子域和完整路径。
请注意,删除拦截器并不会删除模拟本身。也就是说,请求将失败而不是被允许通过实际的 url。
我发现布尔返回值没有帮助。即使没有删除拦截器,它也可以返回 true。我创建了一个 issue for that。