最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

如何向nock.Scope添加扩展功能

IT培训 admin 7浏览 0评论

如何向nock.Scope添加扩展功能

我在角度/打字稿服务器端应用程序的单元测试中使用nock。我有一组经常发出的复杂请求,我想将同一组nock请求重用于多个单元测试。我想向nock.Scope添加函数,使我可以像这样设置单元测试:

const req = nock('/')
  .mockPermissions(param1, param2)
  .get('/unique-request-for-unit-test')
  .reply(200, {data: true});

我曾尝试像这样创建一个testHelper.ts文件:

import nock from 'nock';

module 'nock' {
  class Scope {
    mockPermissions(param1: string, param2: string): Scope;
  }
}

nock.Scope.prototype.mockPermissions = function(param1: string, param2: string) {
  return this
    .get('/permission')
    .reply(200, { permission: data })
    .get('/group')
    .reply(200, { group: data });
};

尽管我的示例尝试编译良好,但在运行时它基本上说找不到nock.Scope。

我该怎么做?

回答如下:

这对您不起作用,因为Scope仅作为类型从库中导出,而作为值的类未公开。您可以看到导出了哪些值here in the index file。

我个人也通常建议不要采用这种方法。修改不完全控制的对象的原型通常被认为是代码气味,因为它可能会导致意想不到的问题。

[以前,当我穿上你的鞋子时,我就走了创建帮助程序功能的方法,这些功能可以预先构建提示。我通常把他们和创建其他工厂的测试助手放在一起。

以您的代码为例,我将创建类似:

export function nockAuthForBaseService(param1: string, param2: string) {
  return nock('http://some-base-server/')
    .get('/permission')
    .reply(200, { permission: param1 })
    .get('/group')
    .reply(200, { group: param2 });
}

然后,我可以调用并重用该工厂的各种测试,以将其干燥。

如果完全由您决定,是否传递现有的nock实例。我从来没有想过要在所有服务中重用我想要的拦截器的场景,因此让我的代码更好地让助手知道基本URL。只需要少一小部分的测试开销。

如何向nock.Scope添加扩展功能

我在角度/打字稿服务器端应用程序的单元测试中使用nock。我有一组经常发出的复杂请求,我想将同一组nock请求重用于多个单元测试。我想向nock.Scope添加函数,使我可以像这样设置单元测试:

const req = nock('/')
  .mockPermissions(param1, param2)
  .get('/unique-request-for-unit-test')
  .reply(200, {data: true});

我曾尝试像这样创建一个testHelper.ts文件:

import nock from 'nock';

module 'nock' {
  class Scope {
    mockPermissions(param1: string, param2: string): Scope;
  }
}

nock.Scope.prototype.mockPermissions = function(param1: string, param2: string) {
  return this
    .get('/permission')
    .reply(200, { permission: data })
    .get('/group')
    .reply(200, { group: data });
};

尽管我的示例尝试编译良好,但在运行时它基本上说找不到nock.Scope。

我该怎么做?

回答如下:

这对您不起作用,因为Scope仅作为类型从库中导出,而作为值的类未公开。您可以看到导出了哪些值here in the index file。

我个人也通常建议不要采用这种方法。修改不完全控制的对象的原型通常被认为是代码气味,因为它可能会导致意想不到的问题。

[以前,当我穿上你的鞋子时,我就走了创建帮助程序功能的方法,这些功能可以预先构建提示。我通常把他们和创建其他工厂的测试助手放在一起。

以您的代码为例,我将创建类似:

export function nockAuthForBaseService(param1: string, param2: string) {
  return nock('http://some-base-server/')
    .get('/permission')
    .reply(200, { permission: param1 })
    .get('/group')
    .reply(200, { group: param2 });
}

然后,我可以调用并重用该工厂的各种测试,以将其干燥。

如果完全由您决定,是否传递现有的nock实例。我从来没有想过要在所有服务中重用我想要的拦截器的场景,因此让我的代码更好地让助手知道基本URL。只需要少一小部分的测试开销。

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论