Задача к лекции «Тесты» – «Тесты»

В качестве задания к лекции про тестирование, после продолжительного мозгового штурма, ме решили предложить вам написать тесты на одну из задач из первого семестра.

Для этого необходимо:

  1. Выбрать любимую задачу из первого семестра
  2. Написать тесты

Чтобы облегчить вам задание, мы решили выполнить первый пункт своими силами и выбрать любимую задачу за вас. Нам кажется, что больше всего вам понравилась девятая задача первого семестра, где вы реализовали прекрасную библиотеку «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).

Всем тесты, котаны!