js-parametrize
v1.0.1
Published
Parametrizing of test functions in Javascript or Typescript
Downloads
134
Maintainers
Readme
JS Parametrize
Parametrizing of test functions in Javascript or Typescript
Inspired by PyTest Parametrize.
Installation
npm i -D js-parametrize
Usage
CommonJS
const { parametrizeSync, parametrizeAsync } = require('js-parametrize')
ESM or Typescript
import { parametrizeSync, parametrizeAsync } from 'js-parametrize'
then parametrize your test, eg. given the following function:
const formatGreeting = (time, name) => {
const prefix = {
'morning': 'Good morning',
'afternoon': 'Good afternoon',
'night': 'Nighty night',
}
const _prefix = prefix.hasOwnProperty(time) ? prefix[time] : 'Hello'
return `${_prefix} ${name}`
}
we can test as follows:
describe('...', () => {
parametrizeSync([
['morning', 'John', 'Good morning John'],
['morning', 'Cheryl', 'Good morning Cheryl'],
['afternoon', 'Dr. House', 'Good afternoon Dr. House'],
['night', 'my dear :)', 'Nighty night my dear :)'],
['UNKNOWN', 'Jimmy', 'Hello Jimmy'],
],
(time, name, expectedResult) => {
it(`should return the expected result for provided time and name combination: ${time}, ${name}`, () => {
assert.equal(formatGreeting(time, name), expectedResult)
})
})
...
This will test formatGreeting
for each of the 5 provided scenarios.
We can also test for the product of some scenarios as follows:
describe('...', () => {
parametrizeSync([
'morning',
'afternoon',
'night',
'UNKNOWN',
],
[
'John',
'Cheryl',
'Dr. House',
],
(time, name) => {
it(`should always include name in result: ${time}, ${name}`, () => {
const result = formatGreeting(time, name)
assert.match(result, new RegExp(name, 'g'))
})
})
...
}
Which will test formatGreeting
for all 12 scenarios.