fetch-mock 是一个 Node.js 和浏览器中可用的 mock HTTP 请求库,可以用于测试和开发。它支持 ES6 的 fetch API,使得使用它来模拟服务端响应变得非常方便。
安装
在 Node.js 中,使用以下命令安装:
--- ------- ---------- ----------
在浏览器中,可以通过 CDN 来使用:
------- -----------------------------------------------------------------------
基本使用
模拟 GET 请求
下面是一个简单的示例,展示了如何使用 fetch-mock 来模拟一个 GET 请求:
------ --------- ---- ------------- -- -- --- -- -------------------------- - ----- ------- ----- --- -- -- --- -- ------------------ -------------- -- ---------------- ---------- -- ------------------- -- ---- ----- ------- ----- - -- ---- --------------------
这个示例中,我们调用 fetchMock.get
方法来模拟一个 GET 请求,并返回一个固定的响应对象 { data: 'mocked data' }
。然后我们使用 fetch
方法来发起这个请求,并打印出响应数据。
最后我们调用 fetchMock.restore
方法来取消模拟请求。这很重要,因为我们在测试或开发的时候可能需要多次模拟请求,如果不清除它们,就会影响后续测试的结果。
模拟 POST 请求
下面是一个示例,展示了如何使用 fetch-mock 来模拟一个 POST 请求:
------ --------- ---- ------------- -- -- ---- -- --------------------------- ----- -------- -- - ----- ---- - ------------------------- ------ - ----- --------- -------------- -- --- -- -- ---- -- ----- -------- - - ------ ------- ----- -- ------------------ - ------- ------- -------- - --------------- ------------------ -- ----- ------------------------ -- -------------- -- ---------------- ---------- -- ------------------- -- ---- ----- --------- ------ ----- - -- ---- --------------------
在这个示例中,我们调用 fetchMock.post
方法来模拟一个 POST 请求,并返回一个根据请求数据生成的响应对象。然后我们使用 fetch
方法来发起这个请求,并打印出响应数据。
模拟错误响应
下面是一个示例,展示了如何使用 fetch-mock 来模拟一个错误响应:
------ --------- ---- ------------- -- ------ --------------------------- - ------- --- ------------- ------- --- -- -- --- -- ------------------- ------------ -- ------------------------------ -- --------- ----- -- ---- --------------------
在这个示例中,我们调用 fetchMock.get
方法来模拟一个 GET 请求,并返回一个抛出异常的响应。然后我们使用 fetch
方法来发起这个请求,并捕获异常并打印出错误信息。
高级使用
模拟延迟响应
有时候我们需要模拟一个网络慢的场景,这时可以使用 Response.init
中的 delay
来模拟延迟响应。下面是一个示例:
------ --------- ---- ------------- -- ------ -------------------------- - ----- ------- ------ -------- - --------------- ------------------ -- ----- - ------ ---- - -- -- - --- --- -- -- --- -- -------- ----------------------------------------------------------- ---------- ---------------------------------------------------------------------------------------