@simpleview/mochalib
Getting Started
npm install @simpleview/mochalib
const mochaLib = require("@simpleview/mochaLib");
Overview
Often when writing unit tests you will end up writing numerous tests which have the exact same boilerplate. In example if you are testing a templating engine you must end up with a section like follows:
it("should fill with string", function() {
assert.strictEqual(template.fill("{{data}}", { data : "foo" }), "foo");
});
it("should fill with boolean", function() {
assert.strictEqual(template.fill("{{data}}", { data : true }), "true");
})
it("should fill with number", function() {
assert.strictEqual(template.fill("{{data}}", { data : 10 }), "10");
});
In that case all 3 tests are basically doing the same thing. But there's a lot of duplicated code between each test. That can be done cleaner like so:
const tests = [
{
name : "should fill with string",
args : {
data : "foo"
},
result : "foo"
},
{
name : "should fill with boolean",
args : {
data : true
},
result : "true"
},
{
name : "should fill with number",
args : {
data : 10
},
result : "10"
}
]
mochaLib.testArray(tests, function(test) {
assert.strictEqual(template.fill("{{data}}", { data : test.data }), test.result);
});
The more complicated the test, the more savings you get by utilizing a test array.
API
testArray(args, fn)
- args -
object
name - string - Test name
timeout - number - Set a timeout in ms for this specific test.
before - function or async function - Execute a function prior to execution of the test. Executed as await before(args).
after - function or async function - Execute a function after execute of the test. Executed as await after(args).
only - boolean - Only execute this test.
skip - boolean - Skip this test.
args - object or function or async function - Definition of the test data which will be passed to the fn. Can be an object of data, or a function, or an async function.
- fn -
function or async function - Executed as await fn(args), receives the test args returned on args. If you utilize a non-async function, it must return a promise if you go off the event loop.
Basic Example
const mochaLib = require("@simpleview/mochaLib");
const assert = require("assert");
describe(__filename, function() {
describe("test array", function() {
const tests = [
{
name : "test 1",
args : {
num : 1,
result : 2
}
},
{
name : "test 2",
args : {
num : 2,
result : 4
}
}
]
mochaLib.testArray(tests, function(test) {
assert.strictEqual(test.num * 2, test.result);
});
});
});