Тестирование приложения Mongoose Node.JS
Я пытаюсь написать модульные тесты для частей моего приложения Node. Я использую Mongoose для своего ORM.
Я искал кучу, чтобы провести тестирование с помощью Mongoose и Node, но не пришел ни с чем. Решения/фреймворки кажутся полными или не упоминают насмешек.
Есть ли способ, которым я могу издеваться над своей Mongoose DB, чтобы я мог возвращать статические данные в своих тестах? Я бы предпочел не создавать тестовую БД и заполнять ее данными для каждого unit test.
Кто-нибудь еще сталкивался с этим?
Ответы
Ответ 1
Я решил это, немного структурировав свой код. Я сохраняю все связанные с мангустом вещи в отдельных классах с API, такими как "сохранить", "найти", "удалить", и ни один другой класс не имеет прямого доступа к базе данных. Затем я просто издеваюсь над те, которые зависят от данных.
Я сделал что-то подобное с фактическими возвращаемыми объектами. Для каждой модели, которую я использую в mongoose, у меня есть соответствующий класс, который обертывает его и предоставляет методы доступа к полям. Они также легко насмехаются.
Ответ 2
Я тоже искал ответы и оказался здесь. Это то, что я сделал:
Я начал использовать mockery, чтобы издеваться над модулем, в котором были мои модели. Затем создайте мой собственный макетный модуль с каждой моделью, свисающей с него как имущество. Эти свойства завернули реальные модели (так что дочерние свойства существуют для тестируемого кода). И затем я переопределяю методы, которые я хочу манипулировать для теста, например save. Это имело то преимущество, что издевательство было в состоянии отменить насмешку.
но...
Мне не все равно, что нужно отменить насмешку над написанием свойств оболочки для каждой модели. Так что теперь я просто требую свой модуль и переопределяю функции, которые я хочу манипулировать. Я, вероятно, буду запускать тесты в отдельных процессах, если это станет проблемой.
В части оформления моих тестов:
// mock out database saves
var db = require("../../schema");
db.Model1.prototype.save = function(callback) {
console.log("in the mock");
callback();
};
db.Model2.prototype.save = function(callback) {
console.log("in the mock");
callback("mock staged an error for testing purposes");
};
Ответ 3
Также стоит упомянуть:
mockgoose - БД памяти, который издевается над Mongoose для целей тестирования.
monckoose - похоже, но использует другой подход (реализует поддельный драйвер). Monckoose кажется неопубликованным как от марта 2015 года.