Може бити изазов тестирати Монгоосе моделе јер треба да пишете тестове који не ометају вашу стварну базу података. МонгоДБ меморијски серверски пакет нуди једноставно решење. Омогућава вам да сачувате своје тестне податке у меморији апликације.

У овом водичу ћете креирати једноставан модел Монгоосе и писати тестове користећи Јест и МонгоДБ меморијски сервер.

Шта је МонгоДБ меморијски сервер?

Последња ствар коју желите је да сачувате лажне податке у вашој стварној бази података, што би се могло догодити ако се повежете на њу током тестирања. Уместо тога, можете се одлучити да користите засебну локалну МонгоДБ инстанцу за складиштење ваших података. Иако ово функционише, неизводљиво је ако се ваши тестови покрећу у облаку. Штавише, повезивање и испитивање праве базе података током сваког теста може бити скупо.

МонгоДБ меморијски сервер, међутим, покреће прави МонгоДБ сервер и омогућава вам да сачувате тестне податке у меморији. Ово га чини бржим од коришћења локалне МонгоДБ базе података пошто подаци нису записани на физичком диску.

Креирање модела Монгоосе

Монгоосе модели обезбеђују интерфејс за повезивање са МонгоДБ базом података. Да бисте их креирали, морате их компајлирати из Монгоосе шеме, који дефинише ваш МонгоДБ модел података. Овај водич ће користити шему за документ обавеза. Садржаће наслов и попуњена поља.

Покрените следећу команду у терминалу да бисте креирали нову фасциклу и ишли до ње.

мкдир монгоосе-модел-тест
цд мунгоосе-модел-тест

Иницијализујте нпм следећом командом:

нпм инит -и

Тхе флаг налаже нпм-у да генерише датотеку пацкаге.јсон са подразумеваним вредностима.

Извршите ову наредбу да бисте инсталирали Мунгос пакет:

нпм инсталирај Мунгос

Креирајте нову датотеку под називом тодо.модел.јс и дефинишите шему задатака:

конст мунгоосе = захтевају("Мунгос")
конст { Шема } = мунгос
конст ТодоСцхема = Нова Шема({
ставка: {
тип: Низ,
потребан: истинито
},
завршено: {
тип: Боолеан,
потребан: истинито
}
})

На крају ове датотеке креирајте и извезите модел задатака:

модул.извоза = монгоосе.модел("Тодо", ТодоСцхема)

Планирање тестова

Када пишете тестове, желите да унапред планирате шта ћете тестирати. Ово осигурава да тестирате сву функционалност вашег модела.

Из модела Монгоосе који смо креирали, задатак треба да садржи ставку типа Стринг и попуњено поље типа Боолеан. Оба ова поља су обавезна. То значи да, у најмању руку, наш тест треба да обезбеди:

  • Важеће ставке су успешно сачуване у бази података.
  • Ставке без обавезних поља се не чувају.
  • Ставке са пољима неважећег типа се не чувају.

Написаћемо ове тестове у једном тестном блоку пошто су повезани. У Јесту, ви дефинишете овај тестни блок користећи описати функција. На пример:

описати ('Тест модела Тодо', () => {
// Ваши тестови иду овде
}

Подешавање базе података

Да бисте подесили МонгоДБ меморијски сервер, креираћете нову инстанцу Монго меморијског сервера и повезати се са Монгоосе-ом. Такође ћете креирати функције које ће бити одговорне за испуштање свих колекција у бази података и прекид везе са инстанцом сервера меморије Монго.

Покрените следећу команду да бисте инсталирали монгодб-мемори-сервер.

нпм инсталирај монгодб-меморија-сервер

Креирајте нову датотеку под називом сетуптестдб.јс и увозите мунгоосе и монгодб-мемори-сервер.

конст мунгоосе = захтевају("Мунгос");
конст { МонгоМемориСервер } = захтевају("монгодб-мемори-сервер");

Затим креирајте функцију цоннецтДБ(). Ова функција креира нову инстанцу Монго меморијског сервера и повезује се на Монгоосе. Покренућете га пре свих тестова да бисте се повезали са тест базом података.

дозволити монго = нула;

конст цоннецтДБ = асинц () => {
монго = чекати МонгоМемориСервер.цреате();
конст ури = монго.гетУри();

чекати монгоосе.цоннецт (ури, {
усеНевУрлПарсер: истинито,
усеУнифиедТопологи: истинито,
});
};

Креирајте функцију дропДБ() додавањем следећег кода. Ова функција испушта базу података, затвара Монгоосе везу и зауставља инстанцу Монго меморијског сервера. Ову функцију ћете покренути након што се сви тестови заврше.

конст дропДБ = асинц () => {
ако (монго) {
чекатиМунгос.веза.дропДатабасе();
чекатиМунгос.веза.Близу();
чекати монго.стоп();
}
};

Последња функција коју ћете креирати зове се дропЦоллецтионс(). Испушта све створене колекције Монгоосе. Покрећете га након сваког теста.

конст дропЦоллецтионс = асинц () => {
ако (монго) {
конст колекције = чекати монгоосе.цоннецтион.дб.цоллецтионс();
за (дозволити збирка оф колекције) {
чекати цоллецтион.ремове();
}
}
};

Коначно, извезите функције цоненцтДБ(), дропДБ() и дропЦоллецтионс().

модул.извоза = { цоннецтДБ, дропДБ, дропЦоллецтионс}

Писање тестова

Као што је поменуто, користићете Јест за писање тестова. Покрените следећу команду да бисте инсталирали јест.

нпм инсталирај шала

У пацкаге.јсон датотеку, конфигуришите јест. Замените постојећи блок „скрипте“ следећим:

"скрипте": {
"тест": "јесте --рунИнБанд --детецтОпенХандлес"
},
"шала": {
"тестЕнвиронмент": "чвор"
},

Креирајте нову датотеку под називом тодо.модел.тест.јс и увезите библиотеку мунгоса, модел задатака и функције цоненцтДБ(), дропДБ() и дропЦоллецтионс():

конст мунгоосе = захтевају("Мунгос");
конст { цоннецтДБ, дропДБ, дропЦоллецтионс } = захтевају("./сетупдб");
конст Тодо = захтевају("./тодо.модел");

Морате да покренете функцију цоннецтДБ() пре него што се покрену сви тестови. Са Јестом, можете користити метод бефореАлл().

Такође морате да покренете функције чишћења. Након сваког теста, покрените функцију дропЦоллецтионс() и дропДБ() након свих тестова. Не морате ово да радите ручно и можете користити методе афтерЕацх() и афтерАлл() из Јест-а.

Додајте следећи код у датотеку тодо.модел.тест.јс да бисте подесили и очистили базу података.

пре свега(асинц () => {
чекати цоннецтДБ();
});

после свега(асинц () => {
чекати дропДБ();
});

после сваког(асинц () => {
чекати дропЦоллецтионс();
});

Сада сте спремни да креирате тестове.

Први тест ће проверити да ли је ставка задатака успешно убачена у базу података. Провериће да ли је ИД објекта присутан у креираном до и да ли се подаци у њему поклапају са онима које сте послали у базу података.

Направите блок за опис и додајте следећи код.

описати ("Тодо Модел", () => {
то("требало би да успешно креира ставку обавеза", асинц () => {
дозволити валидТодо = {
ставка: "Оперем судове",
завршено: лажно,
};
конст невТодо = чекати Тодо (валидТодо);
чекати невТодо.саве();
очекивати(невТодо._ид).да се дефинише();
очекивати(невТодо.итем).бити(валидТодо.итем);
очекивати(невТодо.завршено).бити(валидТодо.завршено);
});
});

Ово креира нови документ у бази података који садржи податке у променљивој валидТодо. Враћени објекат се затим проверава у односу на очекиване вредности. Да би овај тест прошао, враћена вредност треба да има ИД објекта. Такође, вредности у пољу ставке и попуњеним треба да се подударају са онима у валидТодо објекту.

Осим тестирања уобичајеног случаја употребе, потребно је да тестирате и случај неуспешне употребе. Од тестова које смо планирали, потребно је да тестирате модел мунгоса са тодо објектом, са недостајућим обавезним пољем и једним са нетачним типом.

Додајте други тест истом блоку описа, на следећи начин:

 то("требало би да не успе за ставку задатака без обавезних поља", асинц () => {
дозволити инвалидТодо = {
ставка: "Оперем судове",
};
покушати {
конст невТодо = Нова Тодо (неважећиТодо);
чекати невТодо.саве();
} улов (грешка) {
очекивати(грешка).тоБеИнстанцеОф(Мунгос.Еррор.ВалидатионЕррор);
очекивати(грешка.грешке.завршено).да се дефинише();
}
});

Модел Тодо мунгоса очекује и ставку и попуњена поља. Требало би да прикаже грешку ако покушате да сачувате задатак без једног од ових поља. Овај тест користи блок три…цатцх да ухвати избачену грешку. Тест очекује да су грешке грешка валидације мунгоса и да потичу из недостајуће попуњеног поља.

Да бисте тестирали да ли модел даје грешку ако користите вредности погрешног типа, додајте следећи код у блок описа.

 то("требало би да не успе за тодо ставку са пољима погрешног типа", асинц () => {
дозволити инвалидТодо = {
ставка: "Оперем судове",
завршено: "Фалсе"
};
покушати {
конст невТодо = Нова Тодо (неважећиТодо);
чекати невТодо.саве();
} улов (грешка) {
очекивати(грешка).тоБеИнстанцеОф(Мунгос.Еррор.ВалидатионЕррор);
очекивати(грешка.грешке.завршено).да се дефинише();
}
});

Имајте на уму да је вредност попуњеног поља стринг уместо логичке вредности. Тест очекује да се појави грешка валидације јер модел очекује логичку вредност.

МонгоМемориСервер и Јест чине одличан тим

Пакет монго-мемори-сервер нпм пружа једноставно решење за тестирање модела Монгоосе. Можете похранити лажне податке у меморију без додиривања базе података ваше апликације.

Можете користити МонгоМемориСервер са Јестом за писање тестова за Монгоосе моделе. Имајте на уму да не покрива све могуће тестове које можете написати за своје моделе. Ови тестови ће зависити од ваше шеме.