¿Hay validación en los campos obligatorios, el campo de correo electrónico y el campo de nombre en Keystone.js?
Aquí está mi modelo de usuario, por ejemplo:
const keystone = require('keystone'); const Types = keystone.Field.Types; const User = new keystone.List('User'); User.add({ name: { type: Types.Name, required: true, initial: true, index: true }, email: { type: Types.Email, required: true, initial: true, index: true, unique: true }, password: { type: Types.Password, initial: true, required: true }, }, 'Permissions', { isAdmin: { type: Boolean, label: 'Can access Keystone', index: true }, }); // Provide access to Keystone User.schema.virtual('canAccessKeystone').get(function () { return this.isAdmin; }); User.defaultColumns = 'name, email, isAdmin'; User.register();Y algún tipo de pruebas unitarias. Los dos últimos fallan porque el error no está arrojando.
const User = keystone.list('User').model; describe('User model', function () { const newUser = { name: { first: 'Test', last: 'Testov', }, email: 'test@test.com', password: 'test', }; describe('validation', function () { it('should reject a new user without email', function (done) { const invalidUser = Object.assign({}, newUser); delete invalidUser.email; new User(invalidUser).validate((err) => { assert.equal('Path `email` is required.', err.errors.email.message); done(); }); }); it('should reject a new user without password', function (done) { const invalidUser = Object.assign({}, newUser); delete invalidUser.password; new User(invalidUser).validate((err) => { assert.equal('Path `password` is required.', err.errors.password.message); done(); }); }); it('should reject a new user with invalid email', function (done) { const invalidUser = Object.assign({}, newUser); invalidUser.email = 'roflrofl'; new User(invalidUser).validate((err) => { console.log(err); assert.isOk(err); done(); }); }); it('should reject a new user without name', function (done) { const invalidUser = Object.assign({}, newUser); invalidUser.name = { omg: 'wtf' }; new User(invalidUser).validate((err) => { console.log(err); assert.isOk(err); done(); }); }); }); });Entonces, las dos primeras pruebas unitarias dan positivo, pero las dos últimas no. ¿Por qué la validación no funciona?
Es porque el método de validate no es un método clave, sino uno que proporciona la mangosta. Y la mangosta tiene una validación mucho más limitada que la piedra angular. Las opciones required: true se pasan al esquema de mongoose, por lo que se lanza cuando intenta dejar un campo obligatorio en blanco. No existe un equivalente trapezoidal real para la validate , pero la validación (mangoose+keystone) se ejecutará cada vez que intente guardar un documento.
Ps se dio cuenta demasiado tarde de que no tenía nada que ver con la versión de Keystone.