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

@krisdages/mocha-prepare

v0.2.0

Published

Add prepare/unprepare async hooks to your Mocha test environment.

Downloads

7

Readme

mocha-prepare

Add prepare/unprepare async hooks to your Mocha test environment.

Overview

You may have multiple test cases to run with mocha, and often times, you would come across situations where you need to do a global setup/teardown processes. Mocha supports root level hooks, but at that point, all of your test files are loaded, meaning, all of your code outside describe() or other mocha's global functions are all executed.

Imagine, the following scenario:

// My test case 1

var foo = require('foo'); // called even before the root level handler `before`

describe('test', function () {
    it('test 1', function () {
        assert.equal(foo.getStatus(), 'good');
    });
});

The module foo provides a method getStatus(). But, what if later on, this foo module chainged its behavior and required an async initialization before the getStatus() method returns a correct value, and you have already written hundreds of test cases this way?

// somewhere, we need to do...
var foo = require('foo');
foo.use(require('foo-plugin-a');
foo.use(require('foo-plugin-b');
foo.init(function () {
    // now the module 'foo' is ready to use.
});

Where can we put the above code? You can put it in your root level before handler, however, modifying all of your existing test cases to put the initialization routine inside the root level hook is obviously painful.

This module allows you to set onPrepare and onUnprepare handlers (takes callback) that are called right before test cases are loaded and right after all the tests are complete.

Installation

$ npm install mocha-prepare --save-dev

How to use

Use require (-r,--require) option

Use require (-r,--require) mocha option to set up prepare / unprepare handlers. Your ./test/mocha.opts should look like this:

--ui bdd
--reporter spec
--timeout 2000
--recursive
--require test/prepare

In this example, Mocha will load ./test/prepare.js first. You can implement your prepare/unprepare handlers in this file.

Set prepare/unprepare handlers

Your prepare.js file should look like this.

var prepare = require('mocha-prepare');

prepare(function (done, mocha) {
    // called before loading of test cases
    someAyncOp(function () {
        // do something with the mocha instance, e.g. 
        // mocha.files.forEach(...)
        done();
    });
}, function (done, mocha) {
    // called after all test completes (regardless of errors)
    someAyncOp(function () {
        // do something with the mocha instance, e.g. 
        // mocha.files.forEach(...)
        done();
    });
});

The second (unprepare) hander is optional.

API

require('mocha-prepare') returns a function that takes onPrepare and onUnprepare handlers:

module(onPrepare [, onUnprepare])

Each handler takes an argument done which will be used in your handlers to tell the module that onPrepare/onUnprepare is complete and ready to move on.

The onPrepare handler's callback (done) may optionally take one argument (err) to indicate the preparation was failed, in which case, the process will exit immediately with exit code 1. If the value passed to done is an instance of Error, it will print the error stack.

The mocha instance is passed as the second argument to each handler.

var prepare = require('mocha-prepare');

prepare(function (done, mocha) {
    // called before loading of test cases
    someAyncOp(function (err) {
        if (err) {
            done(err);
            return;
        }
        // do something with the mocha instance, e.g. 
        // mocha.files.forEach(...)
        :
        done();
    });
});

The onUnprepare handler's callback does not take any argument.

Note

  • 'mocha' is specified as its peerDependencies. Make sure to have mocha in your devDependencies.