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

简介

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

安装

shell 复制代码
npm install mockttp @types/mockttp

模拟http服务测试

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

typescript 复制代码
import { getLocal } from 'mockttp';
const mockServer = getLocal();

在测试前需要启动服务

typescript 复制代码
mockServer.start(8080);

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

typescript 复制代码
await mockServer
  .forGet('/my-mocked-path')
  .thenReply(200, '{"message": "ok"}');

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

typescript 复制代码
const response = await fetch(
  `http://localhost:${mockServer.port}/my-mocked-path`,
);
expect(await response.text()).toEqual('{"message": "ok"}');

最后停止服务

typescript 复制代码
mockServer.stop()

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

my.spec.ts

typescript 复制代码
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"}');
  });
});
相关推荐
一瓢一瓢的饮 alanchan37 分钟前
通过AI自动生成springboot的CRUD以及单元测试与压力测试源码(一)
人工智能·spring boot·单元测试·压力测试·jpa·aicoder·java crud
阿陈陈陈1 小时前
【Node.js入门笔记8---fs的一些高级功能】
笔记·node.js
川石课堂软件测试1 小时前
涨薪技术|Kubernetes(k8s)之Pod环境变量
java·功能测试·docker·云原生·容器·kubernetes·单元测试
MoLingDong2 小时前
PyCharm中pyexecjs调用Node的救赎之路:当Anaconda与fnm狭路相逢
python·node.js
啊糊先森2 小时前
mac切换本地node版本
macos·node.js·mac
新新coder2 小时前
Webpack如何使用抽象语法树来编写插件
前端·javascript·node.js
冬冬小圆帽11 小时前
Webpack 优化深度解析:从构建性能到输出优化的全面指南
前端·webpack·node.js
twins352019 小时前
使用Node.js和Express搭建图片缓存服务或应用服务器
node.js·express
lastriches20 小时前
基于Python的selenium入门超详细教程(第2章)--单元测试框架unittest
自动化测试·软件测试·python·selenium·单元测试·web测试·unittest
全栈若城21 小时前
87.HarmonyOS NEXT 单元测试与自动化测试指南:构建可靠的测试体系
华为·单元测试·harmonyos·harmonyos next