MSW,顾名思义是使用 Service Worker 实作 API mocking 的套件,在今年的 JSDC 也有大大分享这个。主要看点之一就是它可以在 network 层发出真的 request,并且由 service worker 拦截请求,回传开发者设计的资料。
这在开发阶段 API 还没完成时,可以很方便前端先行开发,也很容易针对各种资料状况撰写测试。由於最近的开发需求是要前端先实作功能出来,所以就决定选这个套件来采坑看看,并且顺道熟悉 service worker 的运作。
MSW 的官方文件其实很简洁好懂,在写相关的 mocking code 其实还蛮好上手的。不过在建置阶段一度还卡蛮久的。所以想说特别写这篇记录一下,如果有人也跟我有障碍的也可以看看XD。
yarn add -DW msw copy-webpack-plugin workbox-webpack-plugin
public
资料夹src
中建立 mocks
资料夹mocks
资料夹新增 handlers.ts
& browser.ts
handlers.ts
export const handlers = [
rest.get<null, IXXXOOO>('/api/example', (req, res, ctx) => {
return res(
ctx.status(200),
ctx.json({...baseApiResult, data: Dummy.SampleData})
);
}),
//...
];
browser.ts
import { setupWorker } from 'msw';
import { handlers } from './handlers'
// This configures a Service Worker with the given request handlers.
export const worker = setupWorker(...handlers);
import { worker } from '/service/mocks/browser';
if (isTesting) {
worker.start();
}
mockServiceWorker.js
npx msw init public/
const CopyWebpackPlugin = require('copy-webpack-plugin');
const WorkboxPlugin = require('workbox-webpack-plugin');
plugins: [
//...
new CopyWebpackPlugin([
{ from: path.resolve(__dirname, '../public', 'mockServiceWorker.js'), to: 'mockServiceWorker.js' },
]),
new WorkboxPlugin.GenerateSW(),
]
index.html
侦测当前浏览器有无支援 service worker,有的话就注册 mockServiceWorker.js
<script>
// Check that service workers are supported
if ('serviceWorker' in navigator) {
// Use the window load event to keep the page load performant
window.addEventListener('load', () => {
navigator.serviceWorker.register('/mockServiceWorker.js');
});
}
</script>
chrome://flags
,并将以下选项设为 Enabled其中,在 Insecure origins treated as secure 提供的文字栏位中,输入开发用的origin。输入完後点下面的 Relaunch 重新启用 Chrome
其实最一开始是尝试 https + openssl 产生 self-signed certificate ,允许浏览器下载 service worker 的 script。不过一直卡在 Chrome 没办法读到产出的凭证,如果有成功过的善心人士,希望可以跟我分享一下QQ
<<: [Golang]select 语句的分支选择规则-心智图总结
前端网页若要取得一个档案,大家可能第一个画面就是下面这个UI吧!是利用<input type=...
今天我们从攻击者的角度来看如何透过作业系统的漏洞,利用攻击目标, 使用Metasploit建立未经授...
系列文总共有了 14 篇文章,除了第一篇的系列文介绍之外,几乎是技术相关的简介。谈了 Next.js...
前言 人是群居动物,没有家人/伴侣/朋友的陪伴,就会感到很空虚。 但是你/你有没有想过其实宠物也是需...
在写程序的过程, 多多少少会遇到需要复杂处理的状况, Go的优点是很多使用情境已经有前人帮忙整理成套...