2017-05-02 4 views
0

Keystone.js의 필수 필드, 전자 메일 필드 및 이름 필드에 대한 유효성 검사가 있습니까?Keystone.js 앱에서 몽구스 유효성 검사가 작동하지 않는 이유는 무엇입니까?

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(); 

그리고 단위 테스트의 일종 :

은 여기 내 사용자, 예를 들어 모델이다. 오류가 발생하지 않기 때문에 마지막 두 개가 실패합니다.

const User = keystone.list('User').model; 

describe('User model', function() { 
    const newUser = { 
    name: { 
     first: 'Test', 
     last: 'Testov', 
    }, 
    email: '[email protected]', 
    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(); 
     }); 
    }); 
    }); 
}); 

그래서 처음 두 유닛 테스트는 긍정적 통과하지만 마지막이되지 않습니다. 유효성 검사가 효과가없는 이유는 무엇입니까?

+0

키스톤 버전은 무엇입니까? – Creynders

+0

@Creynders 4.0.0-beta5 –

답변

1

validate 방법은 키스톤 방법이 아니고 몽구스가 제공하는 방법이기 때문입니다. 그리고 몽구스는 키스톤보다 훨씬 제한적인 검증을 받았습니다. required: true 옵션은 몽구스 스키마에 전달되므로 필요한 필드를 비워 두려고 할 때 throw됩니다. validate에 대한 실제 키스톤 보정은 없지만 문서를 저장하려고 할 때마다 (몽구스 + 키스톤) 유효성 검사가 실행됩니다.

p.s. Keystone 버전과 아무 관련이 없다는 것을 너무 늦게 깨달았습니다

+0

답장을 보내 주셔서 감사합니다. 나는 방금 전자 메일 필드의 유효성 검증 방법이 없다는 것을 알아 냈습니다. 그래서 String이 아닌 keystone 전자 메일 유형을 사용한다고 가정 한 것은 분명하지 않습니다. 답을 완성하기 위해, 몽구스 모델 –

+0

의 이메일 필드에 대한 검증 방법을 정의 할 수 있습니다. @VadimShvetsov Keystone _does_ 이메일 필드에 대한 추가 유효성 검사를 수행하지만 저장 한 경우에만 수행하십시오. 관리자 UI에 저장하면 자동으로 실행됩니다. 그러나 문서로 직접 작업하는 경우 List.updateItem (v4) 또는 updateHandler (v0.3)를 사용하여 추가 유효성 검사를 수행해야합니다. – Creynders

+0

감사합니다. 이것은 완전히 답변입니다! –