We have only covered a single scenario with our first unit test. Therefore, we should write more tests to cover every scenario. Try completing the unit test suite for generateValidationErrorMessage yourself; once you are ready, compare your solution with the following one:
import assert from 'assert';
import generateValidationErrorMessage from '.';
describe('generateValidationErrorMessage', function () {
it('should return the correct string when error.keyword is "required"', function () {
const errors = [{
keyword: 'required',
dataPath: '.test.path',
params: {
missingProperty: 'property',
},
}];
const actualErrorMessage = generateValidationErrorMessage(errors);
const expectedErrorMessage = "The '.test.path.property' field is missing";
assert.equal(actualErrorMessage, expectedErrorMessage);
});
it('should return the correct string when error.keyword is "type"', function () {
const errors = [{
keyword: 'type',
dataPath: '.test.path',
params: {
type: 'string',
},
}];
const actualErrorMessage = generateValidationErrorMessage(errors);
const expectedErrorMessage = "The '.test.path' field must be of type string";
assert.equal(actualErrorMessage, expectedErrorMessage);
});
it('should return the correct string when error.keyword is "format"', function () {
const errors = [{
keyword: 'format',
dataPath: '.test.path',
params: {
format: 'email',
},
}];
const actualErrorMessage = generateValidationErrorMessage(errors);
const expectedErrorMessage = "The '.test.path' field must be a valid email";
assert.equal(actualErrorMessage, expectedErrorMessage);
});
it('should return the correct string when error.keyword is "additionalProperties"', function () {
const errors = [{
keyword: 'additionalProperties',
dataPath: '.test.path',
params: {
additionalProperty: 'email',
},
}];
const actualErrorMessage = generateValidationErrorMessage(errors);
const expectedErrorMessage = "The '.test.path' object does not support the field 'email'";
assert.equal(actualErrorMessage, expectedErrorMessage);
});
});
Run the tests again, and note how the tests are grouped under the describe block:
$ yarn run test:unit
generateValidationErrorMessage
should return the correct string when error.keyword is "required"
should return the correct string when error.keyword is "type"
should return the correct string when error.keyword is "format"
should return the correct string when error.keyword is "additionalProperties"
should return the correct string when error.keyword is not recognized
5 passing (20ms)
We have now completed the unit tests for generateValidationErrorMessage, so let's commit it:
$ git add -A && \
git commit -m "Complete unit tests for generateValidationErrorMessage"
should return the correct string when error.keyword is "required"