codeceptjs
Version:
Supercharged End 2 End Testing Framework for NodeJS
256 lines (164 loc) • 5.12 kB
Markdown
---
permalink: /helpers/JSONResponse
editLink: false
sidebar: auto
title: JSONResponse
---
<!-- Generated by documentation.js. Update this documentation by updating the source code. -->
**Extends Helper**
This helper allows performing assertions on JSON responses paired with following helpers:
* REST
* GraphQL
* Playwright
It can check status codes, response data, response structure.
* `requestHelper` - a helper which will perform requests. `REST` by default, also `Playwright` or `GraphQL` can be used. Custom helpers must have `onResponse` hook in their config, which will be executed when request is performed.
Zero-configuration when paired with REST:
```js
// inside codecept.conf.js
{
helpers: {
REST: {
endpoint: 'http://site.com/api',
},
JSONResponse: {}
}
}
```
Explicitly setting request helper if you use `makeApiRequest` of Playwright to perform requests and not paired REST:
```js
// inside codecept.conf.js
// ...
helpers: {
Playwright: {
url: 'https://localhost',
browser: 'chromium',
},
JSONResponse: {
requestHelper: 'Playwright',
}
}
```
If you plan to add custom assertions it is recommended to create a helper that will retrieve response object from JSONResponse:
```js
// inside custom helper
const response = this.helpers.JSONResponse.response;
```
* `config`
Checks that response code is not equal to the provided one
```js
I.dontSeeResponseCodeIs(500);
```
* `code` **[number][1]**&
Checks for deep inclusion of a provided json in a response data.
```js
// response.data == { data: { user: 1 } }
I.dontSeeResponseContainsJson({ user: 2 });
```
If an array is received, checks that no element of array contains json:
```js
// response.data == [{ user: 1 }, { user: 3 }]
I.dontSeeResponseContainsJson({ user: 2 });
```
* `json` **[object][2]**
Checks that response code is equal to the provided one
```js
I.seeResponseCodeIs(200);
```
* `code` **[number][1]**&
Checks that the response code is 4xx
Checks that the response code is 3xx
Checks that the response code is 5xx
Checks that the response code is 2xx
Use it instead of seeResponseCodeIs(200) if server can return 204 instead.
```js
I.seeResponseCodeIsSuccessful();
```
Checks for deep inclusion of a provided json in a response data.
```js
// response.data == { user: { name: 'jon', email: 'jon@doe.com' } }
I.seeResponseContainsJson({ user: { email: 'jon@doe.com' } });
```
If an array is received, checks that at least one element contains JSON
```js
// response.data == [{ user: { name: 'jon', email: 'jon@doe.com' } }]
I.seeResponseContainsJson({ user: { email: 'jon@doe.com' } });
```
* `json` **[object][2]**
Checks for deep inclusion of a provided json in a response data.
```js
// response.data == { user: { name: 'jon', email: 'jon@doe.com' } }
I.seeResponseContainsKeys(['user']);
```
If an array is received, check is performed for each element of array:
```js
// response.data == [{ user: 'jon' }, { user: 'matt'}]
I.seeResponseContainsKeys(['user']);
```
* `keys` **[array][3]**
Checks that response data equals to expected:
```js
// response.data is { error: 'Not allowed' }
I.seeResponseEquals({ error: 'Not allowed' })
```
* `resp` **[object][2]**&
Validates JSON structure of response using [Zod library][4].
See [Zod API][5] for complete reference on usage.
Use pre-initialized Zod instance by passing function callback:
```js
// response.data is { name: 'jon', id: 1 }
I.seeResponseMatchesJsonSchema(z => {
return z.object({
name: z.string(),
id: z.number()
})
});
// or pass a valid schema
import { z } from 'zod';
I.seeResponseMatchesJsonSchema(z.object({
name: z.string(),
id: z.number()
}));
```
* `fnOrSchema` **any**&
Executes a callback function passing in `response` object and assert
Use it to perform custom checks of response data
```js
I.seeResponseValidByCallback(({ data, status }) => {
assert.strictEqual(status, 200);
assert('user' in data);
assert('company' in data);
});
```
* `fn` **[function][6]**&
[]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number
[]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object
[]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array
[]: https://zod.dev
[]: https://zod.dev/
[]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function