waverunner

1.0.0 • Public • Published

Testing should be easy! 🏄‍♀️

Let's get a Javascript test suite running in 30 seconds. Here's what test results will look like in our console:

multipleTermsTest: 0.79 ms ok
decimalTermsTest: 0.04 ms ok
negativeTermsTest: 0.03 ms ok
nonNumericTermsTest: 0.21 ms ok
testSuite: 3.19 ms ok

Step 1: ☝️

Create a module that you'd like to conduct tests on. We'll use an addition module that adds numbers together, and name it addition.js.

// addition.js
module.exports.addition = function addition(...terms) {
  return terms.reduce((total, term) => {
    if (typeof term !== 'number') throw new Error('Unsupported non-numeric addition')
    return term += total
  })
}

Step 2: ✌️

Introduce a test module that imports addition.js, called addition.test.js. Writing tests is extremely simple, because there's only two rules to follow:

  • A "test" is any function, that will throw an Error object to indicate failure.
  • All test modules, like addition.test.js should export an Array of test functions, named tests. Easy right?
// addition.test.js
const { addition } = require('./addition')
 
function multipleTermsTest() {
  if (addition(5, 5, 5) !== 15)
  throw new Error('Addition with multiple terms must work')
}
 
function decimalTermsTest() {
  if (addition(5, 1.25) !== 6.25)
  throw new Error('Addition with decimal numbers must work')
}
 
function negativeTermsTest() {
  if (addition(5, (-5)) !== 0)
  throw new Error('Addition with negative numbers must work')
}
 
function nonNumericTermsTest() {
  // We can use the assert module if we'd like
  const assert = require('assert')
  assert.throws(() => addition(5, '5'))
}
 
module.exports.tests = [
  multipleTermsTest,
  decimalTermsTest,
  negativeTermsTest,
  nonNumericTermsTest,
]

Step 3: 🤟

Add test.js, which will be an entrypoint for the entire test suite. Pass any number of modules into testSuite(), and use node test.js to kick things off.

// test.js
const { run, testSuite } = require('waverunner');
 
run(testSuite(
  require('./addition.test'),
  // require('./any-other.test'),
));

Why Waverunner? 🧠

  • All tests run top-to-bottom in the order they're included.
  • Nothing runs without your explicit say so.
  • No extra abstraction layers to learn. Just throw an Error.

Package Sidebar

Install

npm i waverunner

Weekly Downloads

11

Version

1.0.0

License

MIT

Unpacked Size

14.2 kB

Total Files

10

Last publish

Collaborators

  • craigfay