Home > database >  Cypress intercept nested array and object and asserts it value
Cypress intercept nested array and object and asserts it value

Time:12-02

I am trying to assert vallue's in a requestbody which I have intercepted with cypress.

The values I need to assert are "name": "NewName", and "title": "STUB1-Draft" you can see in the requestbody example that I have attached.

My testscript in Cypress:

 it.only('Check the requestbody', function () {
cy.intercept('PUT', '**/api/assessmenttest/**', req => {
            req.reply({ statusCode: 200 });
        }).as('NewSectionAndItem');

        cy.wait('@NewSectionAndItem')
            .its('request.body.test')
            .its('testParts')
            .its('testSections')
           .its('name')
            .should('include', 'NewName');
     //cy.wait('@NewSectionAndItem').its('request.body.testParts').expect(arr_obj[1].name).to.equal('NewName')

The request body look like the following:

{
  "structureStatistics": {
    "testPartCount": 1,
    "testSectionCount": 6,
    "itemCount": 23
  },
  "name": "BIMMA",
  "title": "OTAP",
  "correctionInstructionsUrl": "C:Stub/FakePath/For/Cypress",
  "correctionInstructionAppendices": [],
  "testParts": [
    {
      "testSections": [
        {
          "order": 1,
          "name": "Tekst 1 Looking for the one? ",
          "itemReferences": [
            {
              "itemId": "55eb5a28-24d8-4705-b465-8e1454f73ac8",
              "weight": 11,
              "neutralisationType": "NoNeutralisation",
              "itemSummary": {
                "id": "55eb5a28-24d8-4705-b465-8e1454f73ac8",
                "title": "H-E-T1-1"
              }
            }
          ],
          "id": "5c3eef2d-1094-4b9e-84c1-f184956f87fa"
        },
        {
          "id": "ffaebc93-0bf6-4f75-944a-f61345a7be90",
          "name": "NewName",
          "itemReferences": [
            {
              "itemId": "58a29037-c92c-48f6-a7c3-a2f94e288992",
              "weight": 0,
              "neutralisationType": "NoNeutralisation",
              "itemSummary": {
                "id": "58a29037-c92c-48f6-a7c3-a2f94e288992",
                "title": "STUB1-Draft",
                "state": "Draft"
              }
            }
          ]
        },
        {
          "order": 2,
          "name": "Tekst 2 The fruit Iron Ox bears",
          "itemReferences": [
            {
              "itemId": "abfc0811-26c7-4d9d-b3cc-0c920e5af259",
              "weight": 2,
              "neutralisationType": "NoNeutralisation",
              "itemSummary": {
                "id": "abfc0811-26c7-4d9d-b3cc-0c920e5af259",
                "title": "H-E-T2-2"
              }
            },
            {
              "itemId": "3cfda5e0-0d64-44ef-8a4d-21f37484c024",
              "weight": 12,
              "neutralisationType": "NoNeutralisation",
              "itemSummary": {
                "id": "3cfda5e0-0d64-44ef-8a4d-21f37484c024",
                "title": "H-E-T2-3"
              }
            },
            {
              "itemId": "19ba8a53-9755-4beb-8f69-edd107b80230",
              "weight": 1,
              "neutralisationType": "NoNeutralisation",
              "itemSummary": {
                "id": "19ba8a53-9755-4beb-8f69-edd107b80230",
                "title": "H-E-T2-4"
              }
            },
            {
              "itemId": "3f5b7b81-df1f-4f01-8165-cb2226d9044d",
              "weight": 1,
              "neutralisationType": "NoNeutralisation",
              "itemSummary": {
                "id": "3f5b7b81-df1f-4f01-8165-cb2226d9044d",
                "title": "H-E-T2-5"
              }
            }
          ],
          "id": "00f7455e-6d7d-4311-80cd-eff45c83ef2c"
        },
        {
          "order": 3,
          "name": "Tekst 3 How to live like a tramp",
          "itemReferences": [
            {
              "itemId": "7e2d568c-4cde-4500-9c6b-c09f246155e4",
              "weight": 1,
              "neutralisationType": "NoNeutralisation",
              "itemSummary": {
                "id": "7e2d568c-4cde-4500-9c6b-c09f246155e4",
                "title": "H-E-T3-6"
              }
            },
            {
              "itemId": "87a5bf1c-451a-40b8-802a-53ee842cafcd",
              "weight": 1,
              "neutralisationType": "NoNeutralisation",
              "itemSummary": {
                "id": "87a5bf1c-451a-40b8-802a-53ee842cafcd",
                "title": "H-E-T3-7"
              }
            }
          ],
          "id": "390ecc2e-6715-4898-aaea-158e790525a2"
        }

      ],
      "navigationMode": "Linear",
      "submissionMode": "Individual",
      "id": "a546a67c-ac39-4e81-bf03-beb482c920a0"
    }
  ],
  "metadataToBePublished": [
    "be63002c-dcf8-449f-a0ae-6ba50d4e2712",
    "4d70239e-7a6e-47c3-b157-462d6c8c5edc"
  ],
  "created": "2022-07-08T09:00:00 00:00",
  "modified": "2022-09-21T23:55:58.6532451 02:00",
  "createdBy": {
    "id": "a45ea6db-bf04-427d-9354-7081b7592a3d",
    "fullName": "Manual Construction"
  },
  "lastModifiedBy": {
    "id": "129a584c-a677-4d9f-b289-019d1815064f",
    "fullName": "OZKAN"
  },
  "id": "300eea01-ee10-4bd9-9356-8aaa933e949c"
}

I could not figure out how I can assert nested arrays and value's, without using deep.equal for the complete request. Thank you indeed!

CodePudding user response:

It basically just looks like a couple of things

  • an extra test property in the test that's not there in the request
  • testParts and testSections are arrays (square bracket instead of curly bracket), so you need an index for them

Generally I think this would work

cy.wait('@NewSectionAndItem')
  .its('request.body')
  .its('testParts.0')
  .its('testSections.1')
  .its('name')
  .should('include', 'NewName');

The problem is identifying the correct array indexes. testParts has only one element, so 0 is the only index option there.

To find the testSection index, create a dummy .json file in VS Code (or other editor) paste in the json from above and use the collapse toggles on the left to easily see which index contains the value you seek.

CodePudding user response:

You can use a cy-spok plugin to make a spok assertion to easily check a nested property.

Example use

const spok = require('cy-spok')
// later in your test
cy.wait('@NewSectionAndItem')
  .its('request.body')
  .should(spok({
    test: {
      testParts: {
        testSections: {
          name: 'NewName',
          title: 'STUB1-Draft'
        }
      }
    }
  });
  • Related