Меню

Unit тестирование с помощью Jasmine

25.06.2018 - java script, NodeJS, ЯП

Введение в тестирование с помощью Jasmine

Для начала воспользуемся функцией с прошлого занятия.

//avg-calculator.js
function calculateAvg(numbers) {

    if (numbers == null) {
        throw new Error("Invalid Input");
    }

    let sum = 0;
    numbers.forEach(num => {
        sum += num;
    });
    return sum / (numbers.length);
}

module.exports = {
    calculateAvg
};

Теперь инициализируем новый npm проект с помощью npm init -y.
И затем можно установить jasmine с помощью команды npm i jasmine -D

Начнем тестирование, с помощью команды консоли jasmine init. Эта команда создаст директорию spec. В мире Jasmine unit тесты называются specs.

В этой директории мы найдем файл конфигурации jasmine.json.
Давайте создадим в папке spec наш файл с юнит тестом — avg-calculator.spec.js. Здесь Вы увидите постфикс — spec, благодаря которому jasmine будет знать что этот файл для тестирования, т.к. это правило было прописано в файле конфигурации jasmine.

Сначала реквайрим с помощью например commonJS нашу функцию. Jasmine юнит тесты вписаны в describe код. Это описание теста. В нашем случае мы описываем поведение нашего калькуля. Следующая функция, которой мы воспользуемся — функция it. В качестве первого параметра она принимает строку, в которой мы описываем что предположительно наш юнит должен сделать. Вторым аргументом мы передаем анонимную функцию, в которой продолжаем писать тесты.

Теперь рассмотрим одну из ключевых функций jasmin — функцию expect. Она принимает один аргумент — значение, которое вы хотите протестировать против чего-либо. И возвращает объект, который содержит несколько проверок. Одна из них toEqual, что в нашем случае означает, что значение возвращенное нашей функцией будет равно аргументу метода toEqual.

const { calculateAvg } = require('../avg-calculator');

describe("AvgCalculator", () => {
    it("should return the average of all numbers given", () => {
        let testNumbers = [4, 5, 3];
        let avg = calculateAvg(testNumbers);

        expect(avg).toEqual(4);
    });
});

Смотрите как легко читается этот тест: мы описываем функцию AvgCalculator. Она должа вернуть среднее из всех данных цифр. И мы ожидаем что среднее значение будет равно четырем.

Теперь давайте напишем второй юнит тест, чтобы проверить как наша функция себя поведет, если мы зададим неверное значение.

Но сперва давайте запусти наш первый тест, просто введя jasmine в консоль.

Возращаемся ко второму тесту…

Пишем еще одну функцию it внутри describe.

Запомните, Вы можете вызывать it множество раз внутри единственного вызова describe. У вас может быть даже несколько describe функций внутри других describe функций.

Также мы можем откулючить некоторые тесты, написав x перед it, чтобы получилось xit. Также можно отключить целый describe блок таким образом — с помощью xdescribe.

const { calculateAvg } = require('../avg-calculator');

describe("AvgCalculator", () => {
    it("should return the average of all numbers given", () => {
        let testNumbers = [4, 5, 3];
        let avg = calculateAvg(testNumbers);

        expect(avg).toEqual(4);
    });

    it("should throw an 'Invalid Input' error when given invalid array", () => {
        expect(() => calculateAvg(null)).toThrow(new Error("Invalid Input"));
    });

    xit("should throw an 'Invalid Input' error when given invalid array", () => {
        expect(() => calculateAvg(null)).toThrow(new Error("Invalid Input"));
    });
});
Метки: , , , ,

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *