空手道:匹配时JSON转换为字符串([object Object])
Karate: JSON is converted to string ([object Object]) when matching
我正在尝试将 API 的响应与架构相匹配。我有以下设置。
这是功能文件:
Feature: As a user, I would like to test APIs of member modules.
Background:
* def DIR_PATH = 'data/users/'
* def signup_request_helpers = read(<path_to_js_file>)
* def signup_response_helpers = read(<path_to_js_file>)
* def request_data = signup_request_data()
Scenario: Test signup of user
Given url my_url
And request request_data
When method POST
Then status 200
Then match response == signup_response_schema
这是保存响应模式的 JS 文件
var signup_response_schema = {
"success": true,
"message": "Successfully signed up.",
"data": {
"user": user_schema,
"confirmation_url": "#string",
"token": "#string",
"role": "#array"
}
};
问题是空手道似乎正在将响应模式转换为字符串。这是我收到的错误消息:
actual: {<response>}, expected: [object Object]
请注意,我可以很好地匹配单个字符串字段。只有当我尝试匹配对象时才会出现问题。另外,我尝试打印架构,变量似乎保存着正确的值,即架构对象。
我试过以下方法:
- 将模式转换为字符串,然后使用库的指令将 JSON 转换为字符串。这不会验证架构
- 直接转换为 json 仍将架构呈现为
[object Object]
注意: 我是 运行 空手道 docker 如果这有什么不同的话。以下是我在 docker-compose 文件中使用的命令:
java -jar -Dkarate.config.dir=/app /app/karate-0.9.1.jar -T 5 path_to_file
空手道中的 JS 并非 无缝。这将起作用:
var temp = {
"success": true,
"message": "Successfully signed up.",
"data": {
"user": user_schema,
"confirmation_url": "#string",
"token": "#string",
"role": "#array"
}
};
karate.set('signup_response_schema', temp);
通常在空手道中 *.js
文件以 function
开头并包含一个功能块。并且使用 def
将读取(评估)该块的结果分配给空手道变量。但是推荐给你的选项是这个,你在文件中只有一个 JSON,扩展名很重要:
Then match response == read('signup_response_schema.json')
请注意,read()
还将计算嵌入的表达式,这很有用。虽然JSON并不是严格意义上的well-formed,但还是推荐
这里的问题不是 JS 评估。变量 signup_response_schema
保存我在 JS 文件中分配给它的值。
问题出在模式的实际匹配上,因为实际响应中缺少一个键。空手道通常会抛出特定的错误消息,指示缺少哪些键,但出于某种原因,这里不是这种情况。
我正在尝试将 API 的响应与架构相匹配。我有以下设置。
这是功能文件:
Feature: As a user, I would like to test APIs of member modules.
Background:
* def DIR_PATH = 'data/users/'
* def signup_request_helpers = read(<path_to_js_file>)
* def signup_response_helpers = read(<path_to_js_file>)
* def request_data = signup_request_data()
Scenario: Test signup of user
Given url my_url
And request request_data
When method POST
Then status 200
Then match response == signup_response_schema
这是保存响应模式的 JS 文件
var signup_response_schema = {
"success": true,
"message": "Successfully signed up.",
"data": {
"user": user_schema,
"confirmation_url": "#string",
"token": "#string",
"role": "#array"
}
};
问题是空手道似乎正在将响应模式转换为字符串。这是我收到的错误消息:
actual: {<response>}, expected: [object Object]
请注意,我可以很好地匹配单个字符串字段。只有当我尝试匹配对象时才会出现问题。另外,我尝试打印架构,变量似乎保存着正确的值,即架构对象。
我试过以下方法:
- 将模式转换为字符串,然后使用库的指令将 JSON 转换为字符串。这不会验证架构
- 直接转换为 json 仍将架构呈现为
[object Object]
注意: 我是 运行 空手道 docker 如果这有什么不同的话。以下是我在 docker-compose 文件中使用的命令:
java -jar -Dkarate.config.dir=/app /app/karate-0.9.1.jar -T 5 path_to_file
空手道中的 JS 并非 无缝。这将起作用:
var temp = {
"success": true,
"message": "Successfully signed up.",
"data": {
"user": user_schema,
"confirmation_url": "#string",
"token": "#string",
"role": "#array"
}
};
karate.set('signup_response_schema', temp);
通常在空手道中 *.js
文件以 function
开头并包含一个功能块。并且使用 def
将读取(评估)该块的结果分配给空手道变量。但是推荐给你的选项是这个,你在文件中只有一个 JSON,扩展名很重要:
Then match response == read('signup_response_schema.json')
请注意,read()
还将计算嵌入的表达式,这很有用。虽然JSON并不是严格意义上的well-formed,但还是推荐
这里的问题不是 JS 评估。变量 signup_response_schema
保存我在 JS 文件中分配给它的值。
问题出在模式的实际匹配上,因为实际响应中缺少一个键。空手道通常会抛出特定的错误消息,指示缺少哪些键,但出于某种原因,这里不是这种情况。