Walidacja treści żądania
Napisz validate(schema, body), które zwraca tablicę błędów (pustą, gdy wszystko jest w porządku). Reguła pola ma type ("string", "number", "boolean", "array"), required, min/max dla liczb i minLength dla napisów.
Treść błędów: name: required (brak pola lub null), age: must be a number / tags: must be an array, age: must be >= 18, age: must be <= 99, name: must have at least 2 characters, a pola spoza schematu dają role: unknown field. Najpierw błędy pól w kolejności schematu, potem nieznane pola w kolejności treści. Jeśli treść nie jest obiektem (napis, tablica, null), wynik to ["body: must be an object"].
Ctrl+Enter uruchamia testy. Tab robi wcięcie; aby wyjść z edytora klawiaturą, naciśnij Esc, a potem Tab. Kod zapisuje się w tej przeglądarce.
Testy (6)
const schema = { name: { type: 'string', required: true, minLength: 2 }, age: { type: 'number', min: 0, max: 150 } }; expect(validate(schema, { name: 'Ann', age: 30 })).toEqual([]); expect(validate(schema, { name: 'Ann' })).toEqual([]);
const schema = { name: { type: 'string', required: true }, email: { type: 'string', required: true } }; expect(validate(schema, {})).toEqual(['name: required', 'email: required']); expect(validate(schema, { name: null, email: 'a@b.c' })).toEqual(['name: required']);
const schema = { age: { type: 'number' }, tags: { type: 'array' }, admin: { type: 'boolean' } }; expect(validate(schema, { age: '30', tags: 'a,b', admin: 'yes' })).toEqual(['age: must be a number', 'tags: must be an array', 'admin: must be a boolean']); expect(validate(schema, { age: NaN })).toEqual(['age: must be a number']);
const schema = { age: { type: 'number', min: 18, max: 99 }, name: { type: 'string', minLength: 2 } }; expect(validate(schema, { age: 5, name: 'A' })).toEqual(['age: must be >= 18', 'name: must have at least 2 characters']); expect(validate(schema, { age: 120 })).toEqual(['age: must be <= 99']);
const schema = { name: { type: 'string' } }; expect(validate(schema, { name: 'Ann', role: 'admin', isAdmin: true })).toEqual(['role: unknown field', 'isAdmin: unknown field']);
const schema = { name: { type: 'string' } }; expect(validate(schema, null)).toEqual(['body: must be an object']); expect(validate(schema, [1, 2])).toEqual(['body: must be an object']); expect(validate(schema, 'text')).toEqual(['body: must be an object']);