Dynamically generate test cases with Jest
As long as you know which cases you want to test up-front (for example, you're not trying to generate them after a network request) you can use Jest to batch out multiple cases at once.
The syntax looks like this
test.each([])("test name", () => {})Single argument per test
If you use the wildcard %s in your test name, it will inject the first string in your test case. The following test spec will generate five different tests.
test.each([
'FULL_TIME',
'PART_TIME',
'SELF_EMPLOYED',
'UNEMPLOYED',
'RETIRED',
])('can set employment type to %s', (type) => {
// Test content here
}),test("can set employment type to FULL_TIME", () => {
const type = "FULL_TIME"
// Test content here
})
test("can set employment type to PART_TIME", () => {
const type = "PART_TIME"
// Test content here
})
test("can set employment type to SELF_EMPLOYED", () => {
const type = "SELF_EMPLOYED"
// Test content here
})
test("can set employment type to UNEMPLOYED", () => {
const type = "UNEMPLOYED"
// Test content here
})
test("can set employment type to RETIRED", () => {
const type = "RETIRED"
// Test content here
})Multiple arguments per test
Each item in the array can itself be an array of arguments.
In the test name, you can use %s multiple times in order to print out the argument.
test.each([
['FULL_TIME', 'FULL_TIME'],
['FULL_TIME', 'PART_TIME'],
['FULL_TIME', 'SELF_EMPLOYED'],
['FULL_TIME', 'UNEMPLOYED'],
['FULL_TIME', 'RETIRED'],
['PART_TIME', 'FULL_TIME'],
['PART_TIME', 'PART_TIME'],
['PART_TIME', 'SELF_EMPLOYED'],
['PART_TIME', 'UNEMPLOYED'],
['PART_TIME', 'RETIRED'],
['SELF_EMPLOYED', 'FULL_TIME'],
['SELF_EMPLOYED', 'PART_TIME'],
['SELF_EMPLOYED', 'SELF_EMPLOYED'],
['SELF_EMPLOYED', 'UNEMPLOYED'],
['SELF_EMPLOYED', 'RETIRED'],
['UNEMPLOYED', 'FULL_TIME'],
['UNEMPLOYED', 'PART_TIME'],
['UNEMPLOYED', 'SELF_EMPLOYED'],
['UNEMPLOYED', 'UNEMPLOYED'],
['UNEMPLOYED', 'RETIRED'],
['RETIRED', 'FULL_TIME'],
['RETIRED', 'PART_TIME'],
['RETIRED', 'SELF_EMPLOYED'],
['RETIRED', 'UNEMPLOYED'],
['RETIRED', 'RETIRED'],
])('can set employment type from %s to %s', ([ firstType, secondType ]) => {
// Test content here
}),test("can set employment type from FULL_TIME to FULL_TIME", () => {
const firstType = "FULL_TIME"
const secondType = "FULL_TIME"
// Test content here
})
test("can set employment type from FULL_TIME to PART_TIME", () => {
const firstType = "FULL_TIME"
const secondType = "PART_TIME"
// Test content here
})
test("can set employment type from FULL_TIME to SELF_EMPLOYED", () => {
const firstType = "FULL_TIME"
const secondType = "SELF_EMPLOYED"
// Test content here
})
// …and so on 22 more timesNext post
Enter the Tech World