Project Icon

mockttp

JavaScript HTTP请求拦截与测试库

Mockttp是一个JavaScript库,用于HTTP(S)请求和响应的拦截与测试。它支持集成测试、HTTP代理构建和真实行为模拟。该库提供HTTPS代理、强类型、Promise支持、并行测试和调试功能。Mockttp适用于Node.js和浏览器环境,为开发者提供灵活的HTTP测试解决方案。

Mockttp 构建状态 可在NPM上获取 在RunKit上尝试Mockttp

HTTP Toolkit的一部分:用于构建、测试和调试HTTP(S)的强大工具

Mockttp允许你在JavaScript中拦截、转换或测试HTTP请求和响应 - 快速、可靠且随处可用。

你可以将Mockttp用于集成测试,通过在测试套件中拦截真实请求,或者你可以使用Mockttp构建自定义HTTP代理,以任何你喜欢的方式捕获、检查和/或重写HTTP。

HTTP测试是最常见和最受支持的用例。有很多工具可以测试HTTP,但通常是通过在JS级别的进程内存根HTTP函数。这将你绑定到特定环境,无法真正测试代码会发送的真实请求,并且只适用于在同一JS进程中发出的请求。它不灵活、有限制且不准确,而且通常还不可靠且难以调试。

与此同时,Mockttp允许你进行准确的真实集成测试,编写一套可以在node或浏览器中开箱即用的测试,支持透明代理和HTTPS,全程使用强类型和promises,快速安全的并行测试,并在每个阶段都内置了可调试性。

Mockttp也经过实战测试,作为可编程重写代理,为HTTP Toolkit的所有HTTP内部功能提供支持。你可以用HTTP Toolkit做的任何事情,都可以用Mockttp作为无头脚本来自动化。

特性

具体来说,Mockttp允许你:

  • 编写简单、快速且可靠的node.js和浏览器HTTP集成测试
  • 存根服务器响应验证HTTP请求
  • 拦截HTTPS,内置自签名证书生成
  • 模拟进程/标签页内外的请求,包括子进程、原生代码、远程设备等
  • 测试真实世界的行为,验证真实发出的请求,并测试整个堆栈在现实中如何处理响应
  • 作为模拟服务器存根直接请求,或作为HTTP模拟代理透明地存根发送到其他地方的请求
  • 使用相同的代码在node和浏览器测试中模拟HTTP(通用/"同构"HTTP模拟)
  • 安全地并行模拟HTTP,自动配置端口、模拟URL和代理设置,实现超高效的集成测试
  • 轻松调试测试,可完全解释所有模拟匹配和未匹配,模拟自动建议,以及额外详细的调试模式
  • 编写现代测试代码,全程使用promises、async/await和强类型(使用TypeScript)

开始使用

npm install --save-dev mockttp

开始测试

要运行HTTP集成测试,你需要:

  • 启动Mockttp服务器
  • 模拟你感兴趣的端点
  • 发出一些真实的HTTP请求
  • 对结果进行断言

这里是一个使用普通promises、Mocha、Chai和Superagent的简单最小示例,可以在Node和现代浏览器中开箱即用:

const superagent = require("superagent");
const mockServer = require("mockttp").getLocal();

describe("Mockttp", () => {
    // 启动你的模拟服务器
    beforeEach(() => mockServer.start(8080));
    afterEach(() => mockServer.stop());

    it("让你模拟请求,并对结果进行断言", async () => {
        // 模拟你的端点
        await mockServer.forGet("/mocked-path").thenReply(200, "一个模拟的响应");

        // 发出请求
        const response = await superagent.get("http://localhost:8080/mocked-path");

        // 对结果进行断言
        expect(response.text).to.equal("一个模拟的响应");
    });
});

(想自己试试吗?尝试在RunKit上运行一个独立版本:https://npm.runkit.com/mockttp)

这已经相当简单了,但我们可以让它更简单、更强大。让我们看看一些更高级的功能:

const superagent = require("superagent");
require('superagent-proxy')(superagent);
const mockServer = require("mockttp").getLocal();

describe("Mockttp", () => {
    // 注意这里没有指定启动端口,所以我们会动态找到一个空闲端口
    beforeEach(() => mockServer.start());
    afterEach(() => mockServer.stop());

    it("让你在不指定端口的情况下进行模拟,允许并行测试", async () => {
        await mockServer.forGet("/mocked-endpoint").thenReply(200, "顶级测试");

        // 尝试使用mockServer.url或.urlFor(path)来获取服务器端口的动态URL
        let response = await superagent.get(mockServer.urlFor("/mocked-endpoint"));

        expect(response.text).to.equal("顶级测试");
    });

    it("让你验证mockttp服务器接收到的请求详情", async () => {
        const endpointMock = await mockServer.forGet("/mocked-endpoint").thenReply(200, "嗯?");

        await superagent.get(mockServer.urlFor("/mocked-endpoint"));

        // 检查模拟以获取它接收到的请求并对其详情进行断言
        const requests = await endpointMock.getSeenRequests();
        expect(requests.length).to.equal(1);
        expect(requests[0].url).to.equal(`http://localhost:${mockServer.port}/mocked-endpoint`);
    });

    it("让你代理发送到任何其他主机的请求", async () => {
        // 匹配完整URL而不仅仅是路径来模拟代理请求
        await mockServer.forGet("http://google.com").thenReply(200, "我不敢相信这不是谷歌!");

        // 使用代理的众多方法之一 - 这假设使用Node和superagent-proxy。
        // 在浏览器中,你可以简单地使用浏览器设置。
        let response = await superagent.get("http://google.com").proxy(mockServer.url);

        expect(response.text).to.equal("我不敢相信这不是谷歌!");
    });
});

这些示例使用了Mocha、Chai和Superagent,但这些都不是必需的:Mockttp可以与任何能处理promises的测试工具一起使用(经过minor调整,许多不能处理promises的工具也可以),并且可以模拟来自任何你可能想要使用的库、工具或设备的请求。

文档

致谢

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号