Home > Software design >  How can i save the bearer token and use it on another 'IT' blocks?
How can i save the bearer token and use it on another 'IT' blocks?

Time:09-16

How can I save the bearer token and use it in another 'IT' blocks? please help I am new to cypress and JavaScript.

let Bearer_token describe('get new API,function (){

it("get api request", function(){
    
    cy.request({

        url : 'whatever url',
        method : "POST",
        body : {
            userName : 'saurabh.sharma.com',
            password : 'Indigo@123'
        }

    }).its('body').then((body) => {
        expect(body.status).to.eq('success')
        let A_token = body.data.token
        // cy.wrap(A_token).as('Bearer_token')
        
        cy.log(body.data.token).as('Bearer_token')
        })
    cy.log(this.Bearer_token)
    
    
    
    cy.request({

        url: 'whatever url',
        method: "GET",
        headers: {
            'authorization': 'Bearer '   this.Bearer_token,
            'client-id': '00'
        }
    }).then((res)=>{
        expect(res.status).to.eq(200)
        var count = res.body.data.totalCount
        cy.wrap(count).as('count')

        })
    cy.log(this.count)   
    })
    

CodePudding user response:

See the hooks section of the Writing tests page in the documentation.

Use a before hook to fetch the bearer token and assign it to a variable in the top level scope of the test module.

let bearer;

before(() => {
    cy.then(async () => {
        // ...
        bearer = ...;
    })
});

CodePudding user response:

You can use the Cypress.env variable to save and use the token globally -

it('get api request', function () {
  cy.request({
    url: 'whatever url',
    method: 'POST',
    body: {
      userName: 'saurabh.sharma.com',
      password: 'Indigo@123',
    },
  })
    .its('body')
    .then((body) => {
      expect(body.status).to.eq('success')
      Cypress.env('Bearer_token', body.data.token)
    })
  cy.log(Cypress.env('Bearer_token'))

  cy.request({
    url: 'whatever url',
    method: 'GET',
    headers: {
      authorization: 'Bearer '   Cypress.env('Bearer_token'),
      'client-id': '00',
    },
  }).then((res) => {
    expect(res.status).to.eq(200)
    var count = res.body.data.totalCount
    cy.wrap(count).as('count')
  })
  cy.log(this.count)
})

CodePudding user response:

The alias method is correct, but don't use it in conjunction with cy.log() as that command does not return the value logged.

...
}).its('body').then((body) => {
  expect(body.status).to.eq('success')
  cy.wrap(body.data.token).as('Bearer_token')
  cy.log(this.Bearer_token)
})
cy.log(this.Bearer_token)

To use the alias in further tests, use the same function() format

it("get api request", function(){
  ...
  cy.wrap(A_token).as('Bearer_token')    
  cy.log(this.Bearer_token)
  ...
})

it("uses api result", function(){
  ...
  cy.log(this.Bearer_token)              
  ...
})
  • Related