Для демонстрации предположим, что у меня есть следующая схема + модель:
const UserSchema = mongoose.Schema({
userName: {
type: String,
required: true,
unique: true
}
});
const UserModel = mongoose.model("User", UserSchema);
Я намерен иметь большую схему, поэтому для упрощения обслуживания она определена в user.schema.js , тогда как соответствующая модель пользователя находится в отдельном файле.
Я рассмотрел модель с помощью модульных тестов и начал размышлять о том, чтобы сделать то же самое для модуля схемы, за исключением ... Я не уверен, есть ли точка?
Я видел, как люди тестировали свои модели / схемы с использованием фактического тестового соединения с базой данных, но это не модульный тест IMO, он больше напоминает интеграционный тест, и это другая концепция. Только для модульного теста схемы мне все равно, правильно ли работает MongoDB.
Интернет (включая SO) также обнаружил код, который проверяет проверку Mongoose. Это ближе к тому, что я хотел сделать, так как основная идея заключается в проверке наличия в схеме всех ожидаемых реквизитов и ограничений. Это будет выглядеть так:
it('should be invalid if username is empty', function(done) {
new UserModel().validate(function(err) {
expect(err.errors.name).to.exist;
done();
});
});
Если тестировать с работающей БД, можно также изменить .validate
на .save
.
Потом до меня дошло, что я буду здесь делать две вещи:
- Тестирование поведения Mongoose, которое я тоже не интересую / не намерен / не хочу делать.
- По сути дублирует мою схему. Если позже я решу что-то изменить в нем, мне тоже придется поменять юнит-тест.
Это похоже на модульное тестирование объекта конфигурации, и это бессмысленно, за исключением, может быть, уверенности в том, что я правильно написал свои регулярные выражения и тому подобное.
Вопросы
- Поэтому я решил вообще не проверять схему. Это имеет смысл, или я что-то упустил?
- В качестве дополнительного вопроса, считаете ли вы, что есть смысл писать тесты с подключением к БД? Это проверило бы мою схему + мангуста + монго и как-то я нахожу это излишним.