@single9/api-tester
TypeScript icon, indicating that this package has built-in type declarations

0.1.10 • Public • Published

Api Tester

A RESTful API tester

Installation

npm i @single9/api-tester

Usage

const ApiTester = require('@single9/api-tester');

Create APIs

const api = new ApiTester([
  {
    name: '<Api Name>',       // only allow certain words and digits
    path: '<Api Path>',       // e.g. /api/posts
    method: '<HTTP Method>',  // e.g. post
  },
], {
  rootUrl: '<API root URL>'   // e.g. https://jsonplaceholder.typicode.com
                              // Default: http://localhost:3000
  showResult: true,           // set false to disable results console log
  headers: {
    // The headers you want to send. e.g. 'authorization': 'Bearer SAdoweasd...',
  },
  auth: { // authorization
    username: 'username',
    password: 'password',
  }
})

Use Your Api

Usage

ApiTester.<your_api_name>(params)
  • params
    • queryString
    • pathParams
    • body
    • uploads
    • tester

params.queryString

Used for query string. e.g. /users?limit=100

api.test({
  queryString: {
    key: value
  }
})
api.test({
  queryString: [
    {
      name: string,
      value: string | number,
    }
  ]
})

params.pathParams

Used for path parameters. e.g. /user/:id

api.test({
  pathParams: {
    key: value
  }
})
api.test({
  pathParams: [
    {
      name: string,
      value: string | number,
    }
  ]
})

params.body

Used for request body.

api.test({
  body: {
    key: value
  }
})

params.uploads

Used for upload files.

api.test({
  uploads: [
    {
      fieldName: '<form feild name>',
      path: '<file path>'
      filename?: '<file name>',
    }
  ]
})

params.tester

Do some test after responded.

api.test({
  tester: function (res) {
    assert(res === string);
  }
})

Example

const api = new ApiTester([
  {
    name: 'getPosts',
    path: '/api/posts',
    method: 'get',
  },
], {
  showResult: true            // set false to disable results console log
});

api.getPosts()
  .then(result => console.log(result))
  .catch(err => console.error(err))

Upload File

ApiTester.Apis.<ApiName>({
  uploads: [
    fieldName: '<Form Field Name>',
    path: '<File Path>',
    filename: '<File Name>',
  ]
})
const path = require('path');
const api = new ApiTester([
  {
    name: 'uploadFile',
    path: '/api/upload',
    method: 'post',
  },
], {
  showResult: true            // set false to disable results console log
});

const filePath = path.join(__dirname, 'image.jpg'),

api.uploadFile({
    uploads: [
      fieldName: 'file',
      path: filePath,
      filename: path.basename(filePath),
    ]
  })
  .then(result => console.log(result))
  .catch(err => console.error(err))

Example

const assert = require('assert').strict;
const ApiTester = require('@single9/api-tester');

// Create your API schema
const schema = [
  {
    name: 'newPost',  // this is your api function name
    path: '/posts',
    method: 'post',
  },
  {
    name: 'getTodo',
    path: '/todos/:todoId',  // path parameter
    method: 'get',
  },
];

const api = new ApiTester(schema, {
  rootUrl: 'https://jsonplaceholder.typicode.com',
  showResult: true
});

async function start() {
  try {
    await api.newPost({
      // Post Body
      body: {
        title: 'foo!!!!!!',
        body: 'bar!!',
        userId: 1
      },
      // Tester
      tester: function(resp) {
        assert.equal(typeof(resp.id), 'number');
      }
    });

    await api.getTodo({
      pathParams: [{
        name: 'todoId', // replace `:todoId` in path
        value: 2
      }],
      tester: function(resp) {
        assert.equal(typeof(resp.title), 'string');
      }
    });
    
  } catch (err) {
    console.error(err);
  }
}

start();

Package Sidebar

Install

npm i @single9/api-tester

Weekly Downloads

4

Version

0.1.10

License

MIT

Unpacked Size

26 kB

Total Files

14

Last publish

Collaborators

  • single9