在我们的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)-不走运。我已经尝试过我提到的所有内容的所有组合,但无法使其正常工作。
答案 0 :(得分:0)
我尝试使用下面的代码(带有一些硬编码的数据),它对我有用,
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
});
});
重要更改:
Object
的使用情况为便于参考,请在此处附上一些屏幕截图