Convert node.js request handler to axios adapter
npm install axiosist


[Axios][axios] based supertest: convert node.js request handler to [axios][axios] adapter, used for node.js server unit test.
npm install --save-dev axiosist
``javascript
// App
const express = require('express')
const app = express()
app.get('/', (req, res) => res.status(201).send('foo'))
// Unit test in async function
const assert = require('assert')
const axiosist = require('axiosist')
void (async () => {
const response = await axiosist(app).get('/')
assert.strictEqual(201, response.statusCode)
assert.strictEqual('foo', response.data)
}) ()
`
Create an axios instance with adapter of the request callback,
and treat all HTTP statuses as fulfilled.
Create the adapter of the request callback, used for your own axios instance.
`javascript`
axiosist(callback)
is equal to
`javascript`
axios.create({ adapter: axiosist.createAdapter(callback) })
Supertest(Superagent) is build on callbacks.
`JavaScript`
supertest(app).get('/').end((err, res) => console.log(res.data))
Although compatible with stream mode & promise mode.
`JavaScript
// Stream mode
fs.createReadStream('foo.txt')
.pipe(supertest(app).post('/'))
.on('response', res => console.log('Successful.'))
// Promise mode
supertest(app).delete('/').then(
res => console.log('Successful.'),
err => console.log('Failed.')
)
`
We can use one mode of them, but not multi modes together.
`JavaScript`
fs.createReadStream('foo.txt')
.pipe(supertest(app).post('/')).then(
res => console.log('Successful.'),
err => console.log('Failed.')
) // Boom: two requests sent.
Axios is build on promises, and easy to use with callbacks & streams together.
`JavaScript`
axiosist(app).post('/', fs.createReadStream('foo.txt')).then(
res => console.log('Successful.'),
err => console.log('Failed.')
) // Works
It may be more suitable for some specific test cases.
Axiosist will keep the host header of the request, for example
`javascript
const express = require('express')
const app = require('app')
app.get('/host', (req, res) => res.send(req.get('host')))
const assert = require('assert')
const axiosist = require('axiosist')
void (async () => {
const response = await axiosist(app).get('/host')
assert.strictEqual('127.0.0.1:5xxxxx', response.data)
}) ()
void (async () => {
const response = await axiosist(app).get('http://www.example.com:3912/host')
assert.strictEqual('www.example.com:3912', response.data)
}) ()
``
MIT
[axios]: https://www.npmjs.com/package/axios