Cypress - get value from json response body

ZachOverflow picture ZachOverflow · Feb 2, 2020 · Viewed 10.6k times · Source

I'm using Cypress to do some API testing, but I am struggling to access values in the JSON response body; however I can perform assertions against the body which suggests it's receiving it correctly.

Below I am trying to assign the JSON body (response.body) and then get the value of 'id' out of it:

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']
    })
})

I've done numerous searches and can't find a concrete way to do it. Any help would be appreciated...

Answer

ZachOverflow picture ZachOverflow · Feb 3, 2020

I managed to solve this by using a Promise;

Doing some further reading, I found out the then function I am executing is synchronous (I'm new to JS, pls don't hurt me).

I refactored the then function to the following:

.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)
        })

It's probably not entirely correct or best practice, but it will do for my demo