The Test Function
The test
function represents a single case in your validation suite. It accepts the following arguments:
Name | Type | Optional | Description |
---|---|---|---|
name | String | No | The name of the value or field that is validated. |
message | String | Yes | An error message to display to the user in case of a failure. |
callback | Function | No | The actual validation logic for the given test. |
key | String | Yes | A unique key used to retain test value when reordering dynamic tests. |
A test can either be synchronous or asynchronous, and it can either have a severity of error
or of warn
.
tip
The test function is very similar to a unit test's it
or test
function, with some additions.
How to fail a test?​
Throwing inside your test body (using enforce)​
Just like in most unit testing frameworks, a validation fails whenever the test body throws an exception. Enforce
throws an error on failed validations.
When thrown with a string
// const username = 'Gina.Vandervort';
// const password = 'Q3O';
test('username', 'Should be at least 3 characters long', () => {
enforce(username).longerThanOrEquals(3);
}); // this test passes
test('password', 'Should be at least 6 characters long', () => {
enforce(password).longerThanOrEquals(6); // an error is thrown here
}); // this test fails
enforce.extend({
isChecked: value => {
return {
pass: !!value.checked,
message: () => 'value must be checked',
};
},
});
/*...*/
/*
tost = { checked: false }
*/
test('tos', () => {
enforce(tos).isChecked(); // will fail with the message: "value must be checked"
});
Explicitly returning false​
To make it easy to migrate your existing validation logic into Vest, it also supports validations explicitly returning false
(and not any other falsy value) to represent failures.
// const username = 'Gina.Vandervort';
// const password = 'Q3O';
test('username', 'Should be at least 3 characters long', () => {
return username.length >= 3; // = true
}); // this test passes
test('password', 'Should be at least 6 characters long', () => {
return password.length >= 6; // = false
}); // this test fails
Rejecting a Promise​
Read more in the next section on async tests.