An open API service indexing awesome lists of open source software.

https://github.com/open-node/restspec

restspec rest-api
https://github.com/open-node/restspec

api-test rest-api-test test-framework testing-tools

Last synced: 2 months ago
JSON representation

restspec rest-api

Awesome Lists containing this project

README

        

# restspec rest-api test

## usage

* npm install restspec --save-dev

```js
var Restspec = require('restspec');
new Restspec(options);
```

## options

* `name` String, This test's name.
* `urlRoot` String, Url root eg. http://127.0.0.1
* `cases` Array, Test cases.
* `hooks` Object, Hooks function.
* `done` Function, Called when test cases exec done.
* `globals.request.headers` Object,

## case
* `name` String, This is name of case
* `uri` String, Request url is `urlRoot` concat `uri`. eg. /session
* `verb` String, Enum `get`, `post`, `put`, `patch`, `delete` default `get`
* `headers` Object, Request customer headers.
* `data` Fixed, Request send data.
* `expects`
* `Status` response.statusCode
* `JSON` assert response.body
```js
//case1. assert body
JSON: {
id: 1,
name: 'Hello'
}

//case2. body is an array, assert one
JSON: ['0', {
id: 1,
name: 'Hello'
}]

//case2. body is an array, assert all
JSON: ['*', {
id: 1,
name: 'Hello'
}]

```
* `JSONTypes` assert response.body type
* `JSONLength` assert response.body length
* `Header` assert one response.headers
```js
Header: ['x-content-record-total', '2']
```
* `Headers` assert some response.headers
```js
Headers: [
['x-content-record-total', '2'],
['content-type', 'application/json']
]
```

## Advanced Usage

```js
JSON: {
// assert is require('assert')
id: function(actual, assert) {
assert.equal(typeof actual, 'number');
assert.equal(actual, 20);
}
```

```js
var case = {
name: 'This is name of case',
uri: '/session',
expects: {
Status: 201,
JSON: {
id: 1,
name: 'Hello world'
},
JSONTypes: ['parent', {
id: Number,
name: String
}]
}
}
```

```js
var case = function(lastBody, lastRes) {
return {
name: 'This is function return case'
uri: '/session',
expects: {
Status: 201,
JSON: {
id: 1,
name: 'Hello world'
},
JSONTypes: ['parent', {
id: Number,
name: String
}]
}
}
};
```

```js
var case = function(lastBody, lastRes) {
return new Promise(function(resolve, reject) {
return resolve({
name: 'This is function return case with promise'
uri: '/session',
expects: {
Status: 201,
JSON: {
id: 1,
name: 'Hello world'
},
JSONTypes: ['parent', {
id: Number,
name: String
}]
}
})
};
};
```

```js
var case = async () => {
const user = await Model.findOne({ where: { id: 1 } });

// If the function is returned, it will be called.
return () => {
const { age } = user;

if (age <= 18) return new Error(`Adult only: ${age}`);

return null;
};
};
};
```

```js
var case = () => {
const age = 17;
// Error instances can be returned directly.
if (age <= 18) return new Error(`Adult only: ${age}`);

return null;
};
```

## Comment
* cases run one by one