pact - 如何为单个字符串体定义契约规范匹配规则?
问题描述
我正在为上传文件的放置请求设置测试。我的 pact 文件中的请求正文由一个字符串组成,其中包含一个 mime 边界,每次测试运行都会发生变化。我正在尝试为请求正文字符串定义正则表达式匹配规则,但它不匹配。标题内容类型的类似匹配规则确实匹配。
如果正文只是一个字符串,我应该如何定义正文的匹配规则?
我在 Rust 中使用 Pact 的参考实现。Pact-Specification 版本是 3。
"request": {
"headers": {
"Content-Length": "206",
"Host": "127.0.0.1:1234",
"Connection": "Close",
"Content-Type": "multipart/form-data; boundary=\"MIME_boundary_4FBA8D0826C707B6\""
},
"body": "--MIME_boundary_4FBA8D0826C707B6\r\nContent-Disposition: form-data; name=\"file\"; filename=\"test_file.txt\"\r\nContent-Type: application/octet-stream\r\n\r\nContent of test file.\r\n--MIME_boundary_4FBA8D0826C707B6--\r\n",
"matchingRules": {
"header": {
"$.Content-Type": {
"matchers": [
{
"match": "regex",
"regex": "multipart/form-data; boundary=\"MIME_boundary_[A-Z0-9]{16}\""
}
]
}
},
"body": {
"$": {
"matchers": [
{
"match": "regex",
"regex": "--MIME_boundary_[A-Z0-9]{16}\r\nContent-Disposition: form-data; name=\"file\"; filename=\"test_file.txt\"\r\nContent-Type: application/octet-stream\r\n\r\nContent of test file.\r\n--MIME_boundary_[A-Z0-9]{16}--\r\n"
}
]
}
}
}
}
上面的代码是测试中使用的协议文件的一部分。测试导致 BodyMismatch 错误。比较预期和接收的主体表明它们仅在 mime 边界上有所不同,因此正则表达式匹配不起作用。
解决方案
通过 Pact 的 Slack 频道我们得到了当前 Pact 代码不支持这种匹配类型的答案。我们在 GitHub 上创建了一个功能请求问题: https ://github.com/pact-foundation/pact-reference/issues/43
推荐阅读
- node.js - 我不能在 nodejs 的 Promise 中使用 req.user 吗?
- laravel - 如何使用 LARAVEL 在 mailgun 标头中发送数据?
- ios - 带有 setCustomSpacing 的 UIStackView 用于动态数量的子视图
- sql - MS SQL 返回没有 GROUP BY 子句的单行案例数据集
- python - 路径插入到 sys.path 但导入模块仍然显示错误,我错过了什么?
- java - Selenium TestnNg - AssertAll() 应该放在测试中的哪个位置
- shell - 如何在shell中保留字符串中的数字?
- visual-studio-code - LaTeX-workshop:徽章不出现
- google-app-engine - 我们正在 Google 应用引擎中部署 Java 应用程序,但出现容量错误
- json - 试图将信息转储到 json,但得到双反斜杠