@equinor/musion-openapi-mock-服务器
一个单独的 HTTP 服务器 @equinor/fusion-openapi-mock: 它服务于每一个
它从OpenAPI的目录中从自己的地址中发现服务,所以是一个测试跑取器(例如.
Playwright)可以将服务发现指向一个源头,并直接驱动每个测试的覆盖
HTTP——不涉及Vite或dev-server进程.
何时使用此软件包
- 您想要一个模拟后端, 您可以独立启动和停止您的应用程序的构建工具( Vite, (a) 捆绑/分阶段的建筑,或普通的Playwright).
- 您希望 Playwright 测试能够覆盖特定服务对一个测试的响应( 例如“ context ” ,然后重置到生成的基准后.
- 你已经有了
@equinor/fusion-openapi-mock光谱并想要通过HTTP服务,而不是 接入了dev-server中间软件.
安装
pnpm add -D @equinor/fusion-openapi-mock-server
快开始
import { createMockServer } from '@equinor/fusion-openapi-mock-server';
const server = createMockServer().use('fusion').use('./mocks');
const { url } = await server.start({ port: 4010 });
// url -> 'http://localhost:4010'
await server.close();
或从CLI:
pnpm exec fusion-mock --preset=fusion ./mocks --port 4010
来源从左到右分层,所以 ./mocks 替换捆绑的同键服务
fusion 预设。 没有源参数, CLI 读取 ./mocks;没有 --port,操作
系统指定一个自由端口.
入境点
| 导入 | 目的 |
|---|---|
@equinor/fusion-openapi-mock-server | createMockServer, (中文(简体) ), createMockAuth, (中文(简体) ), createMockAnalytics (在测试中读取,等待并重置所记录的分析),及其服务器/会话类型. |
@equinor/fusion-openapi-mock-server/discovery | 定义可执行文件 <name>.mock.ts 模块 defineService,或使用低级 discoverServices, (中文(简体) ), createService,以及 createRouter APIs (英语). |
@equinor/fusion-openapi-mock-server/presets | 装有捆绑预装装载器的登记册. |
@equinor/fusion-openapi-mock-server/presets/fusion | fusionPreset, (中文(简体) ), defineRolesV2Mock融合服务的定义, defineAnalyticsMock (模拟监测服务,接收、记录和种子分析), defineAppFeatureEventsMock (Apps服务公司) POST /apps/feature-events/query ”),以及 parseOtlpLogsRequest 编号 : parseOtlpResourceLog 编号 : projectAnalyticsEvent 用来读解解析器 Fusion的解析管道的方式. |
模拟服务器显示生成的服务响应,源定义的字段/路径覆盖, 可编程的中端软件,运行时操作会覆盖. 从目录发现开始;使用 只有当伪造器功能或中间软件路由不能是时, 才有较低级别的发现入口 以JSON或YAML表示.
迁移:路径到regexp v9
通过注册的中间软件路由所捕获的这一主要释放变化参数
ServiceBuilder.middleware 或导出 createRouter。审查处理器
RouteContext.params,特别是一个段内有多个参数的路线.
router.get('/:file.:ext', (_req, res, { params }) => res.json(params));
// Request: /foo.json.html (relative to the service)
// Before (v8): { file: 'foo.json', ext: 'html' }
// Now (v9): { file: 'foo', ext: 'json.html' }
优先选择独立的有意义的值,更新模拟路由和测试 合并客户端 :
router.get('/files/:file/extensions/:ext', (_req, res, { params }) => res.json(params));
// Request: /files/foo.json/extensions/html
// params = { file: 'foo.json', ext: 'html' }
如果已有的 URL 必须保持不变, 请抓取整个段并明确分割到 在您的处理器中最后一个点 而不是依赖模糊的匹配者抓取 :
router.get('/:filename', (_req, res, { params }) => {
const filename = String(params.filename);
const separator = filename.lastIndexOf('.');
if (separator <= 0 || separator === filename.length - 1) {
res.statusCode = 400;
res.json({ error: 'Expected a filename with an extension' });
return;
}
res.json({ file: filename.slice(0, separator), ext: filename.slice(separator + 1) });
});
// Request: /foo.json.html -> { file: 'foo.json', ext: 'html' }
直接 createRouter 仍为使用 trailing: false路径 /files/ 匹配 /files/没有
/files 或者说 /files//; 无法启用可选的后导划线 。 独立服务器
已经在服务中间软件匹配前将空路段正常化, 因此注册 /files
此处:服务请求 /files, (中文(简体) ), /files/ 财务报告和审定财务报表 /files// 到达同一路线。 这种正常化
升级时不变。 简单路线,例如 /users/:id 不受捕获变化的影响.
添加既支持 HTTP 响应又支持 params 无效
文件名和后继斜拉变体。 依赖性仅为无害环境管理,需要22号节点或更新;
继续使用本包的无害环境管理切入点.
文档
- 开始 - 目录公约,捆绑
fusion通过 CLI 或程序预设、覆盖机制、分层和运行服务器 - 用 Playwright 测试 ——按会次选择用户, 切换、 瞄准镜符号的发布、 操作覆盖、 重置和全路由参考
- 本地测试帮助文章 ——以本地的帮助docs为嘲讽
help服务defineHelpArticlesMock,所以dev门户网站打开文章的应用程序 请求useHelpCenter() - 测试本地分析 ——接受,记录,并给分析师以种子
应用程序音轨
useTrackFeature()在 Playwright 中检查createMockAnalytics,以及 以defineAnalyticsMock财务报告和审定财务报表defineAppFeatureEventsMock