integratify v6.0.0
Integratify
Make Node.js integration testing easy!
Installation
Install via npm
npm install integratifyor via yarn
yarn add integratifyUsage
const integratify = require('integratify');import * as integratify from 'integratify';Configuration
Global
You can set a global configuration that will used for all tests. Adviced to set this in a configuration file running before each test file. This is optional
import { setConfiguration } from 'integratify';
setConfiguration({
dataPath: 'data',
schemaValidator: (data, schema) => myValidationFunc(data, schema),
});Local
You can always overwrite any global configuration per test suite when initializing your Integratify test runner.
const express = require('express');
const app = express();
const testRunner = integratify(app, {
prefix: '/api/auth', // Optional prefix for every url path
dataPath: 'data', // Optional path where actual data will be placed on.
schemaValidator: (data, schema) => myValidationFunc(data, schema), // Function to validate data against a schema
});Getting Started
Run api tests
// test.config.ts
import { setConfiguration } from 'integratify';
setConfiguration({
dataPath: 'data',
schemaValidator: (data, schema) => myValidationFunc(data, schema),
});
// login.test.ts
const testRunner = integratify(app, {
prefix: '/auth',
dataPath: 'customDataPath', // Will overwrite global setting
});
describe('POST /login', () => {
it('Should successfully log in existing user', async () => {
const { status, header, body } = await testRunner
.post("/login")
.send({
payload: { username, password }, // Optional body
query: { ... }, // Optional query parameters
headers: { ... }, // Optional headers
file: { name: 'fileName.png', value: '...' }, // Optional file
})
.expect({
status: 200,
schema: loginOutsputSchema,
matchObject: { username: expect.any(String)}
matchObjectInArray: { username: expect.any(String)},
toEqual: { username: expect.any(String)};
length: 1,
spies: [
fetchSpy, // Will validate whether called once
{ spy: firebaseSpy, amount: 1 },
],
error: new BadRequestError(errors.THIS_WAS_NOT_OK),
paths: [
{ 'meta.count': 10 },
{ 'meta.totalCount': 250 },
]
});
});
});Available Options
.post .get .put .patch .delete
| Key | Type | Description | Allowed value(s) |
|---|---|---|---|
| payload | string/object | Body payload | any string/object |
| query | string/object | Query payload | any string/object |
| headers | object | Custom headers | any object |
| file | object | File payload | { name: string, value: any } |
.expect
| Key | Type | Description | Allowed value(s) |
|---|---|---|---|
| status | number | HTTP status | valid HTTP status code |
| schema | any | Validation schema | Expected schema for schemaValidator configuration property |
| matchObject | object | .toMatchObject | any object |
| matchObjectInArray | object | Matches an object within an array | any object |
| toEqual | any | .toEqual | any |
| length | number | Matches length of response | number |
| spies | object | Checks whether specific spies got called | [mySpy] or [{ spy: mySpy, amount: 2 }] |
| error | Error | Potential error to validate against | Javascript Error |
| paths | object | Validate custom return keys besides dataPath | {'meta.count': 1} |
Error support for @tree-house/errors.
To Do
Unfortunately no time could be found yet to add automated tests. This is the first thing planned now we have a stable version 3 released.
Tests
You can run npm run test to run all tests
You can run npm run test:coverage to run all tests with coverage report
Authors
See the list of contributors who participated in this project.
License
This project is licensed under the ISC License - see the LICENSE.md file for details
2 years ago
3 years ago
3 years ago
4 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago