正则表达式匹配Nock测试失败

时间:2018-10-25 18:42:18

标签: javascript node.js regex nock

我正在尝试匹配URL。

lab.before(async () => {
  nock('https://dev.azure.com')
    .get(centosAzureUri)
    .times(5)
    .reply(201, [
    ...

如果我使用字符串,则可以正常工作。下面是一个示例: const centosAzureUri = `/${conf.org}/${conf.buildProject}/_apis/build/builds?api-version=4.1&branchName=${conf.buildBranch}`

但是,我想使用正则表达式,如下所示: const centosAzureUri = new RegExp(`/${conf.org}/${conf.buildProject}/_apis/build/builds?api-version=4.1.*`, 'g') 那是行不通的。

根据文档,nock应接受正则表达式,.*应与任何符号匹配(由于。),并允许将这些匹配的字符重复任意次。因此,我假设它应该接受任何字符串结尾,包括&branchName=${conf.buildBranch}

我做错了什么?

2 个答案:

答案 0 :(得分:1)

我认为nock只使用regex文字和regex对象,它将返回一个新对象。例如。

  nock('http://example.com')
       .get(/harry\/[^\/]+$/)
       .query({param1: 'value'})
       .reply(200, "OK");

查看相关 How to build nock regex for dynamic urls

答案 1 :(得分:0)

请注意,RegExp只需要不超过“ 4.1”的模式来执行匹配。如果匹配,则字符串的其余部分将被忽略。例如:

const centosAzureUri = new RegExp(`/${conf.org}/${conf.buildProject}/_apis/build/builds?api-version=4.1`, 'g')

此外,您可能希望尝试擒纵系统,因为斜线需要以下内容:

const centosAzureUri = new RegExp(`\/${conf.org}\/${conf.buildProject}\/_apis\/build\/builds?api-version=4.1`, 'g')

HTH!