2

I am trying to assert value'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!

2 Answers 2

2

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.

Sign up to request clarification or add additional context in comments.

Comments

0

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({
    testParts: {
      0: [
        testSections: {
          name: 'NewName',
          title: 'STUB1-Draft'
        }
      ]
    }
  });

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.