У меня недавно была такая же проблема.
Прежде всего, я бы порекомендовал проверить валидаторы самостоятельно. Просто переместите их в отдельный файл и экспортируйте имеющиеся у вас функции проверки.
Это позволяет легко разделять ваши модели на отдельные файлы, поскольку вы можете использовать эти валидаторы в разных моделях.
Вот пример тестирования валидаторов самостоятельно:
// validators.js
exports.validatePresenceOf = function(value){ ... }
exports.validateEmail = function(value){ ... }
Вот пример теста для этого (с помощью mocha + should):
// validators.tests.js
var validator = require('./validators')
// Example test
describe("validateEmail", function(){
it("should return false when invalid email", function(){
validator.validateEmail("asdsa").should.equal(false)
})
})
Теперь для более сложной части:)
Для проверки работоспособности ваших моделей без доступа к базе данных существует функция проверки, которую можно вызывать непосредственно в вашей модели.
Вот пример того, как я сейчас это делаю:
describe("validating user", function(){
it("should have errors when email is invalid", function(){
var user = new User();
user.email = "bad email!!"
user.validate(function(err){
err.errors.email.type.should.equal("Email is invalid")
})
})
it("should have no errors when email is valid", function(){
var user = new User();
user.email = "test123@email.com"
user.validate(function(err){
assert.equal(err, null)
})
})
})
Обратный вызов валидатора возвращает объект ошибки, который выглядит примерно так:
{ message: 'Validation failed',
name: 'ValidationError',
errors:
{ email:
{ message: 'Validator "Email is invalid" failed for path email',
name: 'ValidatorError',
path: 'email',
type: 'Email is invalid'
}
}
}
Я все еще новичок в nodeJS и mongoose, но именно так я тестирую свои модели + валидаторы, и, похоже, до сих пор получалось довольно хорошо.