В качестве задания к лекции про тестирование, после продолжительного мозгового штурма, ме решили предложить вам написать тесты на одну из задач из первого семестра.
Для этого необходимо:
- Выбрать любимую задачу из первого семестра
- Написать тесты
Чтобы облегчить вам задание, мы решили выполнить первый пункт своими силами и выбрать любимую задачу за вас. Нам кажется, что больше всего вам понравилась девятая задача первого семестра, где вы реализовали прекрасную библиотеку «Flow». Которая предлагала следующий интерфейс:
flow.serial([func1, func2], callback)
Метод serial
запускает функции [func1, func2]
в массиве последовательно. Результат функции передается в следующую. Помимо результата предыдущей функции, она получает колбэк. Колбэк принимает первым параметром ошибку, а вторым – данные для следующей функции. Если любая из функций передает в колбэк ошибку, то следующая не выполняется, а вызывается основной колбэк callback
.
flow
.serial([
function(next) {
next(err, 'result1');
},
function(data, next) { // data === 'result1'
next(err, 'result2');
}
], function (err, result) { // result === 'result2'
});
flow.parallel([func1, func2], callback)
Метод parallel
запускает функции [func1, func2]
в массиве параллельно. Результат собирается в массив, который передается в основной callback
при завершении всех функций. Функции func1
, func2
тоже принимают колбэк. Колбэк принимает первым параметром ошибку, а вторым – данные для конечного массива.
flow
.parallel([
function(next) {
next(err, 'result1');
},
function(next) {
next(err, 'result2');
}
], function (err, results) { // results === ['result1', 'result2']
});
flow.map(['value1', 'value2'], func, callback)
Метод map
запускает функцию func
с каждым значением ['value1', 'value2']
параллельно. Результат собираются в массив, который передаётся в основной callback
при завершении всех запусков.
Покрыть тестами дополнительное задание:
flow.makeAsync(func)
Метод превращает синхронную функцию func
в асинхронную.
flow.parallel([func1, func2, func3, func4], limit, callback)
Метод аналогичен parallel
, но в один момент времени могут выполняться не больше limit
функций, если какая-то функция завершилась можно запускать следующую. Важно следить, чтобы количество одновременно запущенных функций было равно limit
(если функций осталось мало, то меньше limit
).