npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

m.test

v0.0.58

Published

m(icro)test is a lightweight test runner for node.js written in es6+

Downloads

62

Readme

m.test

travis npm-dependencies standard-js npm-package-quality npm-node-version npm-version npm-license

m(icro)test is a lightweight test runner for node.js written in es6+ (~4kb).

donations

thanks for your support! gratipay

install

install m.test directly from npm to project's devDependencies.

npm install --save-dev m.test

usage

test files are run by simply passing them to node. for a given test/index.js run the following command to execute the suite:

node test

run the following one to enable node's debugger:

node debug test

cli

more utilities to run your suites are available through the cli. if no files are given they will be looked up from ./test recursively.

m.test [options] [files]

when executing suites through the cli m.test will be assigned to global.test by design. the following line can be omitted:

const {test} = require('m.test')

further instructions can be accessed via --help flag and man-pages by executing either m.test --help or man m.test within your shell.


basic usage

const {ok} = require('assert')

test('it just works!', function () {
  ok(true)
})

async usage

const {ok} = require('assert')

test('it works async too!', function (done) {
  setTimeout(function () {
    ok(true)
    done()
  }, 0)
})

test('done takes a error argument!', function (done) {
  setTimeout(function (err = null) {
    done(err)
  }, 0)
})

test('runner works with Promise', function (done) {
    let promise = new Promise(function (resolve, reject) {
      setTimeout(function () {
        resolve(true)
      }, 0)
    })

    promise.then(result => {
      ok(result)
      done()
    })
  })

context usage

test('can be used as a context', function () {
  test('works!', function (done) {
    done(null)
  })
  test('works!', function (done) {
    done(null)
  })
})

alias usage

const {test: context, test: describe, test: it} = require('m.test')

context('given some context', function () {
  describe('your subject', function () {
    it('just works!', (done) => done(null))
  })
})

beforeEach afterEach usage

test('description', function (done) {
  done(null)
})
beforeEach(done => setup(done))
afterEach(done => teardown(done))

it is important to call beforeEach and afterEach wrap functions after test functions themselves. when using wraps within nested suites consider their contextual binding.

test('description 1', function () {
  test('description 1.1', Function.prototype)
  test('description 1.2', Function.prototype)
  beforeEach(done => setup(done))
  afterEach(done => teardown(done))
})
test('description 2', function () {
  test('description 2.1', Function.prototype)
  test('description 2.2', Function.prototype)
})

(in the example above hooks would be called for 1.1 e 1.2)


skip modifier

test.skip('description', function () {
  // this function will never be called
})

the skip modifier comes with an optional doSkip=true parameter that enables/disables the skip behavior according to the expression:

test.skip('description', function () {
  // this test will be skipped when NODE_ENV=CI
}, /CI/gi.test(process.env.NODE_ENV))

timeout modifier

test.timeout('description', function () {
  // this test will fail if it exceeds 200ms of execution
}, 200)

the timeout modifier comes with an optional doTimeout=true parameter that enables/disables the timeout behavior according to the expression:

test.timeout('description', function () {
  // this test will have a timeout when NODE_ENV=CI
}, 200, /CI/g.test(process.env.NODE_ENV))

view more