前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >使用mockttp库模拟HTTP服务器和客户端进行单元测试

使用mockttp库模拟HTTP服务器和客户端进行单元测试

作者头像
kongxx
发布2025-02-06 21:17:27
发布2025-02-06 21:17:27
8000
代码可运行
举报
运行总次数:0
代码可运行

简介

mockttp 是一个用于在 Node.js 中模拟 HTTP 服务器和客户端的库。它可以帮助我们进行单元测试和集成测试,而不需要实际发送 HTTP 请求。

安装

代码语言:javascript
代码运行次数:0
复制
npm install mockttp @types/mockttp

模拟http服务测试

首先导入并创建一个本地服务器实例

代码语言:javascript
代码运行次数:0
复制
import { getLocal } from 'mockttp';
const mockServer = getLocal();

在测试前需要启动服务

代码语言:javascript
代码运行次数:0
复制
mockServer.start(8080);

然后通过mockServer的forGet方法模拟一个GET请求,并设置响应状态码和响应体,这里其实就是我们期望模拟的请求和返回码与内容

代码语言:javascript
代码运行次数:0
复制
await mockServer
  .forGet('/my-mocked-path')
  .thenReply(200, '{"message": "ok"}');

接下来使用fetch方法发送一个请求,然后断言返回的内容是否是我们期望的

代码语言:javascript
代码运行次数:0
复制
const response = await fetch(
  `http://localhost:${mockServer.port}/my-mocked-path`,
);
expect(await response.text()).toEqual('{"message": "ok"}');

最后停止服务

代码语言:javascript
代码运行次数:0
复制
mockServer.stop()

最后,看一个完整的测试例子

my.spec.ts

代码语言:javascript
代码运行次数:0
复制
import { getLocal } from 'mockttp';

const mockServer = getLocal();

describe('Mockttp test', () => {
  beforeEach(() => mockServer.start(8080));
  afterEach(() => mockServer.stop());

  it('test get', async () => {
    await mockServer
      .forGet('/my-mocked-path')
      .thenReply(200, '{"message": "ok"}');

    const response = await fetch(
      `http://localhost:${mockServer.port}/my-mocked-path`,
    );

    expect(await response.text()).toEqual('{"message": "ok"}');
  });

  it('test post', async () => {
    await mockServer
      .forPost('/my-mocked-path')
      .withBody(JSON.stringify({ key: 'value' }))
      .thenReply(200, '{"message": "ok"}');

    const response = await fetch(
      `http://localhost:${mockServer.port}/my-mocked-path`,
      {
        method: 'POST',
        body: JSON.stringify({ key: 'value' }),
      },
    );

    expect(await response.text()).toEqual('{"message": "ok"}');
  });
});
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-02-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
  • 安装
  • 模拟http服务测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档