Имейте в виду, что блоки describe
и it
не выполняют никаких тестов;они добавляют тесты в список тестов , который будет выполнять Mocha.Помещение блока describe
в функцию, вызываемую из ловушки before, как это, никогда не приведет к выполнению кода вроде chai.request(...
и т. Д. (И даже если бы он это сделал, он был бы полностью нарушен: ловушка before запускается перед каждымтест, вы не хотите делать утверждения там, потому что он не будет связан с каким-либо конкретным модульным тестом.)
Я не могу дать более конкретный совет, потому что я не уверен, что вы пыталисьВыполните, но в целом ваши блоки describe
и it
должны быть конструкциями верхнего уровня, а не помещаться внутри другого кода, подобного этому.
РЕДАКТИРОВАТЬ: просто чтобы прояснить путь выполнения здесь: ваш перед ловушкойЗапускает, который вызывает applyTests
, который вызывает a()
, который выполняет блок описания и добавляет ваш тестовый модуль TEST
в список тестов, а затем возвращается.Затем он запускает тесты, включая test
и TEST
.
РЕДАКТИРОВАТЬ: Ах, имеет смысл, позвольте мне предложить два шаблона, которые часто используются в модульных тестах.
Шаблон 1: «Тестовый цикл»
Этот шаблон создает множество похожих тестов, используя массив входных параметров для создания соответствующих описаний тестов и тестовых тел.
[
{ foo: "milk", bar: "smoothie" },
{ foo: "yogurt", bar: "fridge" },
{ foo: "whatever", bar: "container" }
].forEach(test => {
it("puts the " + test.foo + " in the " + test.bar, function () {
assert(subject.someMethod(foo) === bar);
});
});
Шаблон 2: «Помощник по тестированию»
Этот шаблон создает отдельные тесты, но помещает общее тело теста в вспомогательный метод, чтобы его можно было использовать повторно.
function testSomeMethod(foo, bar) {
assert(subject(foo) == "bar");
}
it("puts the milk in the fridge", function () {
testSomeMethod("milk", "fridge");
});
it("puts the cereal in the pantry", function () {
testSomeMethod("cereal", "pantry");
});
ПримерыВыше очень просты, но либо цикл тестирования, либо шаблон вспомогательного теста можно использовать для инкапсуляции гораздо более сложной последовательности шагов (настройка запроса, просмотр некоторых заголовков / тел ответов и т. д.).