Пользовательские объекты ошибок для путей схемы MongooseJavascript

Форум по Javascript
Ответить
Anonymous
 Пользовательские объекты ошибок для путей схемы Mongoose

Сообщение Anonymous »

Возьмите следующую схему Mongoose.

Код: Выделить всё

const userSchema = mongoose.Schema({
username: {
type: String,
required: true,
unique: true,
minLength: 3
},
name: String,
passwordHash: String
})

const User = mongoose.model('User', userSchema)
Согласно официальной документации Mongoose. Вы можете создать собственное сообщение об ошибке для каждого пути к схеме следующим образом.

Код: Выделить всё

 minLength: [3, 'username must be at least 3-character long']
В тестах Node.js вы можете легко проверить неправильные случаи следующим образом:

Код: Выделить всё

test('a user with too short username cannot be added into database', async () => {
try {
const user = new User({
username: 'x'
})

await user.save()
} catch (error) {
expect(error.username.message).toBe('username must be at least 3-character long')
}
})
Однако для большей читаемости у меня есть большой объект ошибки проверки, где каждая ошибка по сути представляет собой объект, содержащий свойство message и свойство code:

Код: Выделить всё

const ERRORS = {
USER: {
USERNAME: {
USERNAME_TOO_SHORT: {
code: 'USERNAME_TOO_SHORT',
message: 'Username is too short.'
}
}
}
}
Таким образом, мне придется сравнивать только коды ошибок в тестах, а не сообщения об ошибках:

Код: Выделить всё

expect(error.username.code).toBe(ERRORS.USER.USERNAME.USERNAME_TOO_SHORT.code)
Проблема в том, что mongoose не допускает «объекты ошибок» для каждого пути:

Код: Выделить всё

 minLength: [3, ERRORS.USER.USERNAME.USERNAME_TOO_SHORT]
В результате получается [object Object] в качестве сообщения, которое бесполезно для тестирования.
Я ищу способ протестировать ошибки проверки mongoose на основе кода ошибки, а не сообщения. Как упоминалось выше, mongoose не допускает объекты ошибок для пути схемы, он ожидает только строки.

Подробнее здесь: https://stackoverflow.com/questions/798 ... hema-paths
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»