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
- Host: GitHub
- URL: https://github.com/open-node/restspec
- Owner: open-node
- Created: 2014-09-02T07:42:19.000Z (almost 11 years ago)
- Default Branch: master
- Last Pushed: 2022-12-09T19:19:09.000Z (over 2 years ago)
- Last Synced: 2025-04-10T12:50:15.492Z (3 months ago)
- Topics: api-test, rest-api-test, test-framework, testing-tools
- Language: JavaScript
- Homepage:
- Size: 43 KB
- Stars: 8
- Watchers: 2
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
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