首页 > 解决方案 > 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) - 没有运气。我已经尝试了我提到的所有内容的所有组合,但无法让它发挥作用。

标签: jsonhttprequestcypress

解决方案


我尝试使用以下代码(使用一些硬编码数据),它对我有用,

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 数据(替换后): 新的 JSON 数据(替换后)

XHR 请求发送更新的 JSON: XHR 请求发送更新的 JSON


推荐阅读