Cypress - получить значение из json тела ответа - PullRequest
1 голос
/ 03 февраля 2020

Я использую Cypress для тестирования API, но пытаюсь получить доступ к значениям в теле ответа JSON; однако я могу выполнить утверждения против тела, которое предполагает, что оно получает его правильно.

Ниже я пытаюсь назначить тело JSON (response.body), а затем получить из него значение 'id':

describe('Creating a board', () => {    
it('should create a board', () => {
    cy.request({
    method : 'POST',
    url:`${requestUrl}/boards/`, 
    qs: {
      name : "test-board",
      token : token,
      key : key
    }
    }).then((response) => {
      expect(response).property('status').to.equal(200)
      expect(response.body).property('id').to.not.be.oneOf([null, ""])
      const body = (response.body)
      boardId = body['id']
    })
})

Я провел множество поисков и не могу найти конкретный способ сделать это. Любая помощь будет оценена ...

Ответы [ 2 ]

2 голосов
/ 03 февраля 2020

Мне удалось решить эту проблему с помощью Обещания;

Продолжая чтение, я обнаружил, что выполняемая мной функция then синхронна (я новичок в JS, пожалуйста, не делайте) мне больно).

Я реорганизовал функцию then в следующее:

.then((response) => {
        return new Promise(resolve => {        
            expect(response).property('status').to.equal(200)
            expect(response.body).property('id').to.not.be.oneOf([null, ""])
            const respBody = response.body;
            boardId = respBody['id']
            resolve(boardId)
        })

Это, вероятно, не совсем правильно или лучшая практика, но это подойдет для моей демонстрации

1 голос
/ 03 февраля 2020

Хотя это больше не нужно, поскольку вы нашли обходной путь, я просмотрел свой кипарисовый код. Я смог получить доступ к свойствам тела ответа следующим образом:

cy.request({
    ...
    }.its('body').then((body) => {
    const whatever = body.whatever;
})

Я полагаю, что он в основном работает так же, как ваш обходной путь - ожидание разрешения тела в обещании.

...