mocha-repeat
Loop tests through diferrent variations of data.
Last updated 6 years ago by rstacruz .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install mocha-repeat 
SYNC missed versions from official npm registry.

mocha-repeat

Loop tests through diferrent variations of data in mocha.js. Perfect for testing against multiple versions of 3rd-party libraries.

var mdescribe = require('mocha-repeat');

var libs = {
  'jquery-1.9': require('../vendor/jquery-1.9.js'),
  'jquery-2.0': require('../vendor/jquery-2.0.js'),
  'jquery-2.1': require('../vendor/jquery-2.1.js'),
};

mdescribe("Tests", libs, function (jQuery) {

  /* ..tests.. */

});

This will be expanded to:

describe("Tests (jquery-1.9)", function () {
  var jQuery = require('../vendor/jquery-1.9.js');
  /* ..tests.. */
});

describe("Tests (jquery-2.0)", function () {
  var jQuery = require('../vendor/jquery-2.0.js');
  /* ..tests.. */
});

describe("Tests (jquery-2.1)", function () {
  var jQuery = require('../vendor/jquery-2.0.js');
  /* ..tests.. */
});

Install

$ npm i --save-dev mocha-repeat

Why?

This effect is easily achievable in plain JavaScript, though the resulting code will be more verbose.

libs = { ... };
for (var version in libs) {
  if (libs.hasOwnProperty(version)) {
    var jQuery = libs[version];

    (function (jQuery, version) {
      describe("Test (" + version + ")", function () {
        /* ..tests.. */
      });
    })(jQuery, version);
  }
}

It's easier to write it this way:

libs = { ... };
mdescribe("Test", libs, function (jQuery, version) {
  /* ..tests.. */
});

Splatting

If the values are arrays, they will be spread across the function's arguments. In this example, the function's 2 arguments (jQuery, options) will be populated by the array items.

var libs = {
  'jquery-1.9': [ require('../vendor/jquery-1.9.js'), { legacy: true } ],
  'jquery-2.0': [ require('../vendor/jquery-2.0.js'), { } ],
  'jquery-2.1': [ require('../vendor/jquery-2.1.js'), { future: true } ],
};

mdescribe("Tests", stubs, function (jQuery, options) {

  if (options.legacy) {
  }

});

Permutations

You can nest calls to mocha-repeat. This is great for testing combinations of multiple library versions. In this example, it tests against every possble combination of underscore [1.0..1.2] with backbone [1.0..1.2].

var libs = {
  underscore: {
    '1.0': '../vendor/underscore/1.0.0.js',
    '1.1': '../vendor/underscore/1.1.0.js',
    '1.2': '../vendor/underscore/1.2.0.js',
  },
  backbone: {
    '1.0': '../vendor/backbone/1.0.0.js',
    '1.1': '../vendor/backbone/1.1.0.js',
    '1.2': '../vendor/backbone/1.2.0.js',
  },
};

var _, Backbone;

mdescribe("Underscore", libs.underscore, function (upath) {
  mdescribe("Backbone", libs.backbone, function (bpath) {

    // load the libraries
    // ...tip: https://www.npmjs.org/package/proxyquire
    before(function () {
      _ = require(upath);
      Backbone = proxyquire(bpath, { underscore: _ });
    });

    it ('loads without errors', function () {
      expect(_).is.a('function');
      expect(Backbone).is.a('object');
    });
  });
})

Output:

$ mocha -R list

  . Underscore (1.0) Backbone (1.0) loads without errors
  . Underscore (1.0) Backbone (1.1) loads without errors
  . Underscore (1.0) Backbone (1.2) loads without errors
  . Underscore (1.1) Backbone (1.0) loads without errors
  . Underscore (1.1) Backbone (1.1) loads without errors
  . Underscore (1.1) Backbone (1.2) loads without errors
  . Underscore (1.2) Backbone (1.0) loads without errors
  . Underscore (1.2) Backbone (1.1) loads without errors
  . Underscore (1.2) Backbone (1.2) loads without errors

  9 passing (120ms)

Thanks

mocha-repeat © 2014+, Rico Sta. Cruz. Released under the MIT License.
Authored and maintained by Rico Sta. Cruz with help from contributors (list).

ricostacruz.com  ·  GitHub @rstacruz  ·  Twitter @rstacruz

Current Tags

  • 0.1.0                                ...           latest (6 years ago)

1 Versions

  • 0.1.0                                ...           6 years ago
Maintainers (1)
Downloads
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 0
Dependencies (0)
None
Dev Dependencies (5)
Dependents (0)
None

Copyright 2014 - 2016 © taobao.org |