Home > Mobile >  How to use a part of intercepted endpoint as a variable in my stub with Cypress
How to use a part of intercepted endpoint as a variable in my stub with Cypress

Time:08-15

I am testing a frontend and I want to make my test more efficient

I have the following custom command:

  cy.intercept('**/api/classification/dd86ac0a-ca23-413b-986c-535b6aad659c/items/**',
    { fixture: 'ItemsInEditor.json' }).as('ItemsInEditorStub')

This works correctly and is intercepts 25 times :). But the Id in the stub file has to be the same as in the requested Endpoint. Otherwise the frontEnd wilt not process it.

At this point I do not want to make 25 stubfiles in the fixture map.

In the printscreen you can see the different calls I need to intercept. The last ID I would like to save as variable and use it in the stub file enter image description here

The Stub is like this:

{
  "item": {
    "version": 3,
    "title": "Cars",
    "rows": [],
    "id": "dynamicIdBasedOnEndPoint"  <- *Can we make it dynamic based on the ID in the endpoint*
  },
  "itemState": "Submitted"
}

UPDATE: What I have for now is just the basic I guess:

cy.intercept('**/api/classification/*/items/**', {
        body:
        {
            item: {
                version: 3,
                title: 'Cars',
                rows: [],
                id: '55eb5a28-24d8-4705-b465-8e1454f73ac8'  //Still need this value to be dynamic and always the same as the intercepted '**'(wildcard)
            },
            itemState: "Submitted"
        }
    })
        .as('ItemsInEditorStub')

CodePudding user response:

You can make a dynamic fixture using javascript.

Ref Providing a stub response with req.reply()

cy.fixture('ItemsInEditor.json', (fixture) => {

  cy.intercept('**/api/classification/dd86ac0a-ca23-413b-986c-535b6aad659c/items/**',
    (req) => {
      const id = req.url.split('/').pop();   // last part of url path 
      fixture.item.id = id;                  // add the id dynamically 
      req.reply(fixture);                    // send altered fixture
    }
  ).as('ItemsInEditorStub')
})

CodePudding user response:

cy.fixture('ItemsInEditor.json').then(ModFixture => {

    cy.intercept('GET', '**/api/classification/**/items/id/**', (req) => {
        const id = req.url.split('/').pop();        // last part of url path 
        ModFixture.item.id = id;                    // add the id dynamically 
        req.reply(ModFixture);                      // send altered fixture
    })
}).as('ItemsInEditorStub')

Thanks to @Fody

  • Related