Я пишу набор тестов для сервера. В основном есть предварительно определенные запросы и ожидаемые ответы для каждого из них.Тесты для асинхронных функций, которые зависят от предыдущего с mochajs
Тесты хранятся в json-файле, поэтому я мог бы впоследствии расширить его по мере необходимости.
Несколько тестов полагаются на два идентификатора предшествующего теста, поэтому тесты не должны выполняться параллельно. Для архивирования я использую waterfall function of the async library, поэтому я могу передать аргументы следующей функции.
Проблема заключается в том, что, когда я повторяю этот массив тестов, я вызываю it(testname, function(done){...})
. В этой функции я выполняю запрос и сравниваю ответ с ожидаемым ответом. После этого я вызываю функцию done
, поэтому мочайы знают, что тест закончен.
Когда я начинаю тесты, первый из них выполняется, но не более.
Для меня это похоже, что mochajs распознает, что в настоящее время нет другой тестовой задачи, поэтому она останавливает сценарий.
Это испытание:
var testFunctions=[];
predefinedTests.forEach(function(test){
var fn = function(error, id_1, id_2, callback){
it("Test", function(done){
makeAsyncRequest(test.url, function(res){
expect(res).to.have.properties(test.answer);
id_1=res.id1;
id_2=res.id2;
done();
/*check if it's the first test,
if that's the case it needs to use the first argument as callback */
if(callback==undefined) return error(null, id_1, id_2);
callback(null, id_1, id_2);
});
});
}
testFunctions.push(fn);
});
async.waterfall(testFunctions);
Это означает, что я могу объявить две глобальные переменные для своих идентификаторов и просто использовать их на каждой итерации? – jonadev95
Я вижу, что код получает идентификаторы из 'test.id1' и' test.id2' (то есть 'id_1 = test.id1' и' id_2 = test.id2'). Я также вижу, что у вас есть 'id_1' и' id_2' в списке параметров функций, вызываемых 'async.waterfall', и значения передаются следующей функции, но я не вижу в этом никакого эффекта вообще , (Значение, если на самом деле Mocha смог выполнить все ваши тесты, результат, который вы получите, не соответствует ожидаемому.) – Louis
Разве что 'test.id1' и' test.id2' * назначены * 'makeAsyncRequest' ? (Если это так, я не получил это из вашего вопроса.) – Louis