Тестирование приложения Mongoose Node.JS - PullRequest
15 голосов
/ 25 сентября 2011

Я пытаюсь написать модульные тесты для частей моего Node-приложения. Я использую Mongoose для своей ORM.

Я искал кучу информации о том, как проводить тестирование с Mongoose и Node, но ничего не получил. Кажется, что решения / фреймворки полностью заполнены или не содержат упоминаний о насмешливых вещах.

Есть ли способ, которым я могу издеваться над моей БД Mongoose, чтобы я мог возвращать статические данные в моих тестах? Я бы предпочел не создавать тестовую базу данных и заполнять ее данными для каждого модульного теста.

Кто-нибудь еще сталкивался с этим?

Ответы [ 3 ]

8 голосов
/ 13 января 2012

Я тоже пошел искать ответы и оказался здесь.Вот что я сделал:

Я начал с использования mockery , чтобы смоделировать модуль, в котором находились мои модели. Затем я создал свой собственный модуль mock, в котором каждая модель свисала с него как свойство,Эти свойства обертывают реальные модели (поэтому для тестируемого кода существуют дочерние свойства).И затем я переопределяю методы, которыми я хочу манипулировать для теста, например, сохранить.Это имело преимущество в том, что издевательство позволяло отменить насмешку.

, но ...

Меня не особо волнует отмена насмешки, чтобы написать свойства оболочки для каждой модели.Так что теперь мне просто нужен мой модуль и переопределить функции, которыми я хочу манипулировать.Вероятно, я буду запускать тесты в отдельных процессах, если это станет проблемой.

В части аранжировки моих тестов:

// 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");
};
6 голосов
/ 07 марта 2014

Также стоит упомянуть:
mockgoose - БД в памяти, которая высмеивает Mongoose, для целей тестирования.
monckoose - аналогично, но использует другой подход (реализует поддельный драйвер). Похоже, что Monckoose не опубликован по состоянию на март 2015 года.

6 голосов
/ 25 сентября 2011

Я решил это, немного структурировав свой код.Я храню все свои вещи, связанные с мангустами, в отдельных классах с такими API, как «save», «find», «delete», и ни один другой класс не имеет прямого доступа к базе данных.Затем я просто высмеиваю те тесты, которые опираются на данные.

Я сделал нечто подобное с реальными объектами, которые возвращаются.Для каждой модели в mongoose у меня есть соответствующий класс, который оборачивает ее и предоставляет методы доступа к полям.Они также легко издеваются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...