Both JUnit and N/XUnit enable us to parameterize tests which differ only by input values and expected results. In other words, we can statically define sets of test data (inputs + expected results) and let one single test execute and validate results for each of the input sets. We can do the same in JS using at least two utilities.
However, for Java and .Net we can generalize tests even more and instead of testing for specific values we can describe the rules for generating input data and generate test data on the fly, using theories ("@Theory" and "[Theory]" respectively).
What utility is there in JS that enables this level of abstraction in writing tests?
I wanted to do something similar and just solved it by creating an array with the input/output parameters and calling that in a loop. This is just a basic example, but I might keep working on it a little more to see what I can make it do.
describe('Arrow', () => {
const theories = [
[undefined, "left-arrow", "<"],
["left", "left-arrow", "<"],
["right", "right-arrow", ">"]
];
theories.forEach(([dir, className, arrow]) => {
it(`should render the correct arrow given ${dir} direction`, () => {
const wrapper = shallow(<Arrow dir={dir} onClick={jest.fn()} />);
expect(wrapper.hasClass(className)).toEqual(true);
expect(wrapper.text().toEqual(arrow);
});
});
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With