Saya menggunakan Cypress untuk melakukan beberapa pengujian API, tetapi saya kesulitan mengakses nilai di badan respons JSON; namun saya dapat melakukan pernyataan terhadap tubuh yang menunjukkan bahwa itu menerimanya dengan benar.

Di bawah ini saya mencoba menetapkan badan JSON (response.body) dan kemudian mendapatkan nilai 'id' darinya:

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

Saya telah melakukan banyak pencarian dan tidak dapat menemukan cara konkret untuk melakukannya. Bantuan apa pun akan dihargai ...

3
ZachOverflow 3 Februari 2020, 01:34

2 jawaban

Jawaban Terbaik

Saya berhasil menyelesaikan ini dengan menggunakan Promise;

Melakukan beberapa bacaan lebih lanjut, saya menemukan fungsi then yang saya jalankan sinkron (saya baru mengenal JS, tolong jangan sakiti saya).

Saya memfaktorkan ulang fungsi then menjadi sebagai berikut:

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

Ini mungkin tidak sepenuhnya benar atau praktik terbaik, tetapi itu akan berhasil untuk demo saya

5
ZachOverflow 2 Februari 2020, 23:08

Meskipun tidak diperlukan lagi saat Anda menemukan solusi, saya telah memeriksa kode cypress saya. Saya dapat mengakses properti badan respons sebagai berikut:

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

Saya percaya ini pada dasarnya bekerja sama dengan solusi Anda - menunggu untuk menyelesaikan tubuh dengan janji.

1
DurkoMatko 3 Februari 2020, 09:38