实际上,除非您确实想要/需要,否则您实际上不必为每个协定交互使用真正的令牌。
通常对于那种东西,我只是创建一个正则表达式,用于在标题上验证某些规则,同时保持它“开放”。在我的节点项目(它在后面使用 Ruby 二进制文件)中,我创建了这 2 个实用程序函数来创建具有模式的对象和另一个用于对象最小值相等的对象:
function term(matcher, generate) {
if ((typeof matcher === 'undefined') || (typeof generate === 'undefined')) {
throw 'Matcher and Generate arguments must be specified to use Term';
}
return {
"json_class": "Pact::Term",
"data": {
"generate": generate,
"matcher": {
"json_class": "Regexp",
"o": 0,
"s": matcher
}
}
};
}
function somethingLike(value) {
return {
"json_class": "Pact::SomethingLike",
"contents": value
};
}
然后,您可以在 DSL 定义中使用它,如下所示:
mockService
.given('a form')
.uponReceiving('a GET request with a valid auth')
.withRequest('get', '/', term('^Bearer (?!null$).+$', 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ'))
.willRespondWith({
status: 200,
headers: {'Content-Type': 'application/json;charset=utf-8'},
body: {worked:true}
});
'term' 实用程序有一个正则表达式作为第一个参数,然后是一个示例(应该与第一个参数匹配)在测试期间使用什么。
我知道这需要在 Pact 本身内更好地扩展,以使其更易于使用。我希望这有帮助。