使用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"}');
  });
});
相关推荐
Hommy882 小时前
【开源剪映小助手-客户端】桌面客户端
python·开源·node.js·github·剪映小助手
走粥4 小时前
node.js 中的 express 框架 - 基础到进阶
node.js·express
qq_229058016 小时前
使用nvm安装node12 以及对应的NPM6.14.16
node.js
zhensherlock6 小时前
Protocol Launcher 系列:Mail Assistant 轻松发送 HTML 邮件
前端·javascript·typescript·node.js·html·github·js
旺王雪饼 www7 小时前
《Express框架深度解析:从基础入门到高级实践与项目架构》
前端·node.js·express
梓䈑8 小时前
gtest实战入门:从安装到TEST宏的单元测试指南
c++·单元测试
汽车仪器仪表相关领域1 天前
NHFID-1000型非甲烷总烃分析仪:技术破局,重构固定污染源监测新体验
java·大数据·网络·人工智能·单元测试·可用性测试·安全性测试
念越1 天前
蓝桥杯4期模拟单元测试解析
蓝桥杯·单元测试