Nondeterministic Postrequisite Metaprotocol

    tentamen

    0.3.0 • Public • Published

    tentamen

    tentamen is a tiny (less than 50 source lines of code) JavaScript testing framework.
    it uses deep equality, so you can test against arrays and objects with ease.

    install

    npm i --save tentamen
    

    usage

    import Tentamen from 'tentamen';
    let tentamen = new Tentamen({
      fn: str => str.startsWith('a')
    });
    
    tentamen.suite('truthy cases');
    tentamen.add('absolutely', 'absolutely', true);
    tentamen.add('acknowledge', 'acknowledge', true);
    
    tentamen.suite('falsy cases');
    tentamen.add('tentamen', 'tentamen', false);
    tentamen.add('percentage', 'percentage', false);
    
    tentamen.done();
    $ node test.js
    truthy cases
      o absolutely
      o acknowledge
    falsy cases
      o tentamen
      o percentage
    
    4 of 4 tests passing
    

    API

    new Tentamen(obj)

    obj

    type: object

    fn

    type: function

    the function to run tests on.

    before(input)

    type: function

    a function to manipulate the input to each test before the test runs.

    after(output)

    type: function

    a function to manipulate the output of each test before tentamen verifies it.

    error(e)

    type: function

    a function to manipulate the output of tests that fail with an error, given the error object.
    this decides what goes below the title of the failing test:

    let tentamen = new Tentamen({
      fn: str => str.concat('a'),
      error: e => e.stack.split('\n')[0]
    });
    
    tentamen.suite('concat');
    tentamen.add('number + string', 1, '1a');
    $ node test.js
    concat
      x number + string
        TypeError: str.concat is not a function
    

    the return value of this function must be of type string.
    if this is omitted, it will return the original object by default.

    afterError(e)

    type: function

    a function to further manipulate the output of this.error.
    if a test fails with an error, but the output of this function equals the test's expected value, the test will pass:

    let tentamen = new Tentamen({
      fn: str => str.concat('a'),
      error: e => e.stack.split('\n')[0],
      afterError: e => e.slice(0, e.indexOf(':'))
    });
    
    // this.error returns the message from the stack,
    // and this.afterError will slice that to its type
    
    tentamen.suite('concat');
    tentamen.add('number + string', 1, 'TypeError'); // should pass
    $ node test.js
    concat
      o number + string
    

    this can be used to write tests which should be allowed to fail.

    tentamen.suite(title, fn?)

    start a new group of tests.

    title

    type: string

    the suite title.

    fn

    type: function

    a new function to replace the current value of this.fn with.

    tentamen.add(title, input, expected)

    run a new test.

    title

    type: string

    the test title.

    input

    type: any

    the input to the test. this value will be manipulated by this.before first.

    expected

    type: any

    the expected output of the test, after it has been manipulated by this.after (or this.afterError, if applicable).

    tentamen.done()

    finish testing, and output the number of passing tests.

    donate

    you can support the development of this project and others via Patreon:

    Support me on Patreon

    Install

    npm i tentamen

    DownloadsWeekly Downloads

    4

    Version

    0.3.0

    License

    MIT

    Unpacked Size

    6.73 kB

    Total Files

    4

    Last publish

    Collaborators

    • sporeball