Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/xotabu4/response-openapi-validator
Asserts your responses against Swagger/OpenApi docs. Useful for API testing.
https://github.com/xotabu4/response-openapi-validator
ajv openapi swagger testing
Last synced: 6 days ago
JSON representation
Asserts your responses against Swagger/OpenApi docs. Useful for API testing.
- Host: GitHub
- URL: https://github.com/xotabu4/response-openapi-validator
- Owner: Xotabu4
- License: mit
- Created: 2020-10-10T15:23:47.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2024-07-31T09:12:58.000Z (3 months ago)
- Last Synced: 2024-10-04T15:43:37.264Z (about 1 month ago)
- Topics: ajv, openapi, swagger, testing
- Language: TypeScript
- Homepage:
- Size: 58.6 KB
- Stars: 16
- Watchers: 3
- Forks: 5
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# response-openapi-validator
This library allows to match your existing response against your swagger/openapi docs.
- Does lookup in your docs, and finds schema defined for provided response
- Uses AJV to validate response body against found schema
- Provides nice and clean errors
- Framework/Stack agnostic (works with everything)
- OpenApi v3 support is not yet verified```typescript
import { ResponseValidator } from "response-openapi-validator";const validator = new ResponseValidator({
// Also can be URL
openApiSpecPath: "./.temp/open_api_docs.json",
});const response = await got("http://someserver.com/api/something");
await validator.assertResponse({
method: response.request?.options?.method,
requestUrl: response?.request?.requestUrl,
statusCode: response?.statusCode,
body: response.body,
});
```### Option: ajvOptions
AJV is used to match found JSON schema against body.
You can define AJV options by passing param:```typescript
const validator = new ResponseValidator({
// Also can be URL
openApiSpecPath: "./.temp/open_api_docs.json",
// You can see all AJV options here
// https://github.com/ajv-validator/ajv#options
ajvOptions: {
// I recommend to keep allErrors, verbose, and jsonPointers options enabled
allErrors: true,
verbose: true,
jsonPointers: true,// Define additional JSON schema formats, if needed
formats: {
double: "[+-]?\\d*\\.?\\d+",
int32: /^(-?\d{1,9}|-?1\d{9}|-?20\d{8}|-?21[0-3]\d{7}|-?214[0-6]\d{6}|-?2147[0-3]\d{5}|-?21474[0-7]\d{4}|-?214748[012]\d{4}|-?2147483[0-5]\d{3}|-?21474836[0-3]\d{2}|214748364[0-7]|-214748364[0-8])$/,
int64: /^\d+$/,
},
},
});
```### Option: apiPathPrefix
Sometimes API has prefix part, which is not defined in docs.
Real path:
```
/core/user/create
```Path defined in docs:
```
/user/create
```You can specify such prefix in options:
```typescript
const validator = new OpenApiValidator({
apiPathPrefix: '/core'
openApiSpecPath: "./.temp/open_api_docs.json",
});await validator.assertResponse({
method: response.request?.options?.method,
requestUrl: response?.request?.requestUrl,
statusCode: response?.statusCode,
body: response.body,
});
```