Я пытаюсь написать модульные тесты для модели Sequelize. У меня есть экземпляр метода в классе, который вызывает метод Sequelize update
. Превратить update
в поддельную функцию - не проблема. Я просто не могу понять, как правильно сделать X = new MyModel()
без какой-либо ошибки. Это говорит мне Class constructor model cannot be invoked without 'new'
.
Я посмотрел на https://sequelize -mock.readthedocs.io / en / stable / , но то, как оно написано, заставляет меня думать, что оно лучше подходит для моделирования моделей при тестировании классов, использующих преимущества модели, а не самой модели.
const BaseUtut = sequelizeInstance.define('utut', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
metadata: {
type: Sequelize.JSON
}
});
class Utut extends BaseUtut {
async updateFromFlat(id, metadata) {
// in reality, i modify metadata, and want to test things around that
modifiedMetadata = methodThatModified(metadata);
// I want to see that update is called with the right output of the modified metadata
return await this.update(
{
id: id,
metadata: modifiedMetadata
},
{
where: {
locale: metadata.locale
}
}
);
}
}
Так что с приведенным выше примером кода, если у меня есть insance Utut
, я знаю, что могу легко смоделировать update
. Я просто не знаю, как инициализировать класс, чтобы потом высмеивать.
Цель теста, который я хочу написать, состоит в том, чтобы просто увидеть, что update вызывается с правильными параметрами , основываясь на моем собственном коде, который не имеет ничего общего с Sequelize. Я хочу убедиться, что мое преобразование на входах установлено правильно, когда собирается Sequelize. Я не планирую проверять, что БД действительно обновлена. Единственная проблема, с которой я сталкиваюсь - это создание экземпляра модели.
Так что все, что мне нужно, чтобы этот код работал:
const instance = new Utut(); // This line doesn't work
instance.update = Jest.fn();
Я не уверен, почему он говорит, что мне нужно вызывать с new
, когда это именно то, что я делаю.