使用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"}');
  });
});
相关推荐
Q_Q5110082852 小时前
python+django/flask的校园活动中心场地预约系统
spring boot·python·django·flask·node.js·php
安冬的码畜日常3 小时前
【JUnit实战3_29】第十八章:REST API 接口测试(上)——RESTful 风格的后端 API 的搭建
测试工具·单元测试·restful·rest api·junit 5
Q_Q19632884754 小时前
python+django/flask基于机器学习的就业岗位推荐系统
spring boot·python·django·flask·node.js·php
by__csdn6 小时前
Node.js版本与npm版本的对应关系
前端·npm·node.js
aini_lovee6 小时前
Node.js 中的中间件机制与 Express 应用
中间件·node.js·express
安冬的码畜日常7 小时前
【JUnit实战3_30】第十八章:REST API 接口测试(下)—— REST API 接口的 MockMvc + JUnit 5 测试实战
测试工具·junit·单元测试·restful·rest api·junit5
重铸码农荣光9 小时前
从「[1,2,3].map (parseInt)」踩坑,吃透 JS 数组 map 与包装类核心逻辑
面试·node.js
慧都小项11 小时前
Parasoft C/C++test如何使用桩函数替代MFC窗口类顺利执行单元测试
单元测试·parasoft·桩函数·mfc窗口类
Jonathan Star12 小时前
Next.js、NestJS、Nuxt.js 是 **Node.js 生态中针对不同场景的框架**
开发语言·javascript·node.js
Q_Q51100828519 小时前
python+django/flask的眼科患者随访管理系统 AI智能模型
spring boot·python·django·flask·node.js·php