cy.request正文中的JSON

时间:2019-04-12 01:01:42

标签: json httprequest cypress

在我们的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)-不走运。我已经尝试过我提到的所有内容的所有组合,但无法使其正常工作。

1 个答案:

答案 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
});
});

重要更改:

  1. 将旧的JSON对象直接分配给新的JSON对象(代替 Object的使用情况
  2. 放置一些日志以跟踪更改

为便于参考,请在此处附上一些屏幕截图

新的JSON数据(替换后): New JSON data (post substitution)

XHR请求发送更新的JSON: XHR request sending updated JSON