json - cy.request 正文中的 JSON
问题描述
在我们的 Web 应用程序中,我们可以使用 POST HTTP 请求更改选项。有很多选项,我将为每个选项编写一个新测试,所以我不想使用 UI 来更改每个选项,因为它们有 150 个。所以我的想法是设置一个自定义命令,我可以将参数输入(参数是我要更新的选项,以及该选项的新值)。
我将选项列表放在一个夹具中,因此它位于 JSON 对象中。我能够找到我正在寻找的密钥并更新夹具中的值,但我遇到了一个问题,我的 cy.request 实际上不会发送任何数据。我试过更新标题,更新正文,设置 json:true。没有任何效果。所以我希望这里有人能给点建议。
//fixture.json
{
"option1":"on",
"option2":"off",
"option3":"off
}
//commands.js
Cypress.Commands.add('update_options',(option, newValue) => {
cy.fixture('fixture.json').then((oldBody)=>{
let newBody = Objects.assign({},oldBody);//copy old options list into new object
function replace(option, newBody){
newBody[option]=newValue;
}
replace(option,newValue);
cy.request({
method:'POST',
url:'myURLwithParams',
form: true,
json: true,
body: newBody
})
});
});
//spec.js
cy.update_options("options1", "off");
我可以使用更新的代码和所有内容获取新对象,以便一切正常。我唯一不知道的是如何让它实际发布。JSON 只是无法正确编译。我试过 JSON.stringify(newBody) - 没有运气。我已经尝试了我提到的所有内容的所有组合,但无法让它发挥作用。
解决方案
我尝试使用以下代码(使用一些硬编码数据),它对我有用,
cy.fixture("fixture").then((oldBody) => {
cy.log(oldBody);
let newBody = oldBody
newBody['option1'] = 'DUMMY_DATA';
cy.log(newBody);
cy.request({
method: "POST",
url: "myURLwithParams",
form: true,
json: true,
body: newBody
});
});
显着变化:
- 直接将旧的 JSON 对象分配给新的 JSON 对象(而不是
Object
使用) - 放置一些日志以跟踪更改
供您参考,在此处附上一些屏幕截图,
推荐阅读
- ios - 将 RPSystemBroadcastPickerView 添加到我的自定义视图并向其内部按钮发送事件时,UI 无法响应
- elasticsearch - 弹性搜索从等效中选择全部
- java - 使用Spring jdbcTemplate时ResultSet关闭后不允许操作
- microsoft-translator - 响应 Microsoft 自定义翻译器 API 的无效类别错误
- php - 如何获取当前id来更新特定id
- python - 在pyodbc的复杂查询中使用参数时如何进行参数值匹配?
- node.js - 一个文件中的多个跑步者只产生第一个的结果
- waf - 自定义 waf 任务既不运行也不查找源
- c# - Python 脚本无法从 C# 或运行 .py 启动
- reactjs - 在 ReactJS 中设置工具提示的可见性