ashna naran
ashna naran

Reputation: 417

How to test a bad request in cypress

I am testing logging in POST method in cypress with incorrect credentials. this returns 400 bad requests which I need to test.

This is what I have:

describe('Login API Test - Correct user login', () => {
  it('Validate the header', () => {
    cy.request({
      method: 'POST',
      url: 'https://myrAPI',
      auth: {
        username: 'user@user',
        password: 'user123',
      },
      headers: {
        'Authorization': 'Basic dXNlckB1c2VyOnVzZXI=',
        'Content-Type': 'text/plain'
      }
    }).then((response) => {
      // expect(response.body).to.exist // true
      // expect(response.body).('User.Access: Exception occured:User.Access : CheckUser: Exception occurred:Error with Authentication Header. result =') // true
      // expect(response.headers).should.contain('text/plain; charset=utf-8')
      // expect(response.body).statusCode.should.equal(400)
      response.status.should.equal(400)
      //expect(response).to.have.property('headers')
    })
  }})

The request that was sent:

Method: POST
URL: https://myapi
Headers: {
  "Connection": "keep-alive",
  "Authorization": "Basic dXNlckB1c2VyOnVzZXIxMjM=",
   "Content-Type": "text/plain",
   "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 
(KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36",
  "accept": "*/*",
  "accept-encoding": "gzip, deflate",
  "content-length": 0
  }

This is the response I get:

Status: 400 - Bad Request
 Headers: {
  "content-length": "239",
   "content-type": "text/plain; charset=utf-8",
 "request-context": "appId=cid-v1:d994e38c-9493-4dd6-ac8c-5395bb9ce790",
   "date": "Tue, 02 Jul 2019 13:35:18 GMT"
}
 Body: User.Access: Exception occured:User.Access : CheckUser: Exception occurred:Exception when checkin...

I'd like to know what is in the response or body

Upvotes: 24

Views: 30217

Answers (4)

Joseph McTigue
Joseph McTigue

Reputation: 9

I did this and it seemed to work, but I'm new at Cypress and JavaScript.

describe('My Tests', () => {
    it('Web Page - Open Welcome Page', => () {
        // verify page opens.
        cy.request({url: 'http://localhost:8080', failOnStatusCode: true}).its('status').should('equal', 200)
        cy.visit('http://localhost:8080', {failOnStatusCode: true})
    })
})

Upvotes: 0

Ousmane
Ousmane

Reputation: 2921

I used the following snippet to explicitly check the status code :

        cy.request({
            url: '/url/returning/400/bad/request/status/code',
            failOnStatusCode:false,
        }).then((resp) => {
            expect(resp.status).to.eq(400)
        })

(source from cypress doc)

Upvotes: 6

Natalia Fernandez
Natalia Fernandez

Reputation: 1

please add in order to valide the response is equal to 400 expect(response.body).has.property("statusCode", 400);

Upvotes: 0

Zach Bloomquist
Zach Bloomquist

Reputation: 5889

The answer to your question is in the error message:

If you do not want status codes to cause failures pass the option: 'failOnStatusCode: false'

So pass failOnStatusCode: false to not fail on bad status codes:

    cy.request({
        method: 'POST',
        url: 'https://myrAPI',
        failOnStatusCode: false,
        auth:
        {
            username: 'user@user',
            password: 'user123',
        },
        headers:
        {
            'Authorization': 'Basic dXNlckB1c2VyOnVzZXI=',
            'Content-Type': 'text/plain'
        }
    })

Upvotes: 41

Related Questions