JSON в теле cy.request - PullRequest
       19

JSON в теле cy.request

0 голосов
/ 12 апреля 2019

В нашем веб-приложении есть параметры, которые можно изменить с помощью HTTP-запроса POST.Есть много вариантов, и я буду писать новый тест для каждого из них, поэтому я не хочу использовать пользовательский интерфейс для изменения каждого параметра, поскольку их 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 голосов
/ 12 апреля 2019

Я попытался с приведенным ниже кодом (с некоторыми жестко закодированными данными), и он работает для меня,

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...