1.1.9 • Published 7 years ago

iotest v1.1.9

Weekly downloads
2
License
MIT
Repository
github
Last release
7 years ago

NPM Version

iotest

Javascript library which makes input/output testing a no-brainer.

install

npm install --save-dev iotest

example with mocha

function f(x){
  return x + 1;
}

Test cases are processed sequentially when testing multiple cases:

const iotest = require('iotest');

describe('f', () => {
  it('should pass i/o tests', (done) => {

    const cases = [
      {inputs: 41, return: 42},
      {inputs: 0, return: 1}
    ];

    iotest(cases, f).
    then(outputs => {
      console.log(outputs):
      // => [42, 1]
      done();
    }).
    reject(done);

  });
});

Testing one case:

const iotest = require('iotest');

describe('f', () => {
  it('should pass i/o tests', (done) => {

    const case = { inputs: 41, return: 42 };

    iotest(case, f).
    then(outputs => {
      console.log(outputs):
      // => [42]
      done();
    }).
    reject(done);

  });
});

case

JSON object describing a test case.

case.inputs

Given arguments of a function.

single input

function f(x){
  return x + 1;
}
const iotest = require('iotest');

const cases = [
  { inputs: 41, return: 42 },    // succeed
  { inputs: [41], return: 42 },  // succeed
];      

iotest(cases, f).
then(outputs => { /* tests succeed */ }).
catch(err => { /* tests failed */ });

multiple inputs

function f(x, y){
  return x + y;
}
const iotest = require('iotest');

const case = { inputs: [10, 32], return: 42} // succeed    

iotest(case, f).
then(outputs => { /* tests succeed */ }).
catch(err => { /* tests failed */ });

case.return / case.error

Expected returned output of a function / Expected error thrown by a function.

function f(x, y){
  if(y === 0){
    throw new Error("division by 0");
  }
  return x / y;  
}
const iotest = require('iotest');

const cases = [
  { inputs: [42, 0], error: {} },   // succeed
  { inputs: [42, 2], return: 21 },  // succeed
];   

iotest(cases, f).
then(outputs => { /* tests succeed */ }).
catch(err => { /* tests failed */ });

case.resolve / case.reject

Expected resolved value / Expected rejected error, of the promise returned by a function.

function f(x, y){
  return new Promise( (resolve, reject) => {
    if(y === 0){
      reject(new Error("division by 0"));
    }else{
      resolve(x / y);  
    }
  });
}
const iotest = require('iotest');

const cases = [
  { inputs: [42, 0], reject: {} },   // succeed
  { inputs: [42, 2], resolve: 21 },  // succeed
];   

iotest(cases, f).
then(outputs => { /* tests succeed */ }).
catch(err => { /* tests failed */ });

depth traversal

if case.return, case.error, case.resolve or case.reject is set with an Object, then it is deeply traversed to make sure each property exists with the right value in the output.

function f(x){
  return {
    x: x,
    y: x + 1
  };
}
const iotest = require('iotest');

const cases = [
  { inputs: 41, return: {x: 41} },              // succeed
  { inputs: 0, return: {y: 1} },                // succeed
  { inputs: 1000, return: {x: 1000, y: 1001} }, // succeed
  { inputs: 7, return: {} }                     // succeed
];

iotest(cases, f).
then(outputs => { /* tests succeed */ }).
catch(err => { /* tests failed */ });

if case.return, case.error, case.resolve or case.reject is set with an Array, then each item is deeply traversed.

function f(x){
  return [
    { x: x, y: x + 1 },
    { x: x, y: y - 1 }
  ];
}
const iotest = require('iotest');

const case = {
  inputs: 41,
  return: [
    {x: 41, y: 42},
    {y: 40}
  ]
}; // succeed


iotest(case, f).
then(outputs => { /* tests succeed */ }).
catch(err => { /* tests failed */ });
1.1.9

7 years ago

1.1.8

7 years ago

1.1.7

7 years ago

1.1.6

7 years ago

1.1.5

7 years ago

1.1.4

7 years ago

1.1.3

7 years ago

1.1.2

7 years ago

1.1.1

7 years ago

1.1.0

7 years ago

1.0.19

7 years ago

1.0.18

7 years ago

1.0.17

7 years ago

1.0.16

7 years ago

1.0.15

7 years ago

1.0.14

7 years ago

1.0.13

7 years ago

1.0.12

7 years ago

1.0.11

7 years ago

1.0.10

7 years ago

1.0.9

7 years ago

1.0.8

7 years ago

1.0.7

7 years ago

1.0.6

7 years ago

1.0.5

7 years ago

1.0.4

7 years ago

1.0.3

7 years ago

1.0.2

7 years ago

1.0.1

7 years ago

1.0.0

7 years ago