24
Автоматическое тестирование в JavaScript

Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

Автоматическое тестирование в JavaScript

Page 2: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

Тестирование

Процесс исследования программного продукта, имеющий своей целью проверку соответствия между реальным поведением программы и её ожидаемым поведением на конечном наборе тестов

2

Page 3: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

Зачем нужны тесты?

• Убрать ручные запуски как средство проверки правильно ли работает функция

• Один программный код проверяет другой программный код

3

https://learn.javascript.ru/testing

Page 4: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

Автоматизированное тестирование

• Тесты написаны отдельно от кода; • В любой момент можно запустить их и

проверить все важные случаи использования.

4

https://learn.javascript.ru/testing

Page 5: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

Плюсы тестирования

• Моментальное обнаружение дефектов

• Локализация проблемы

• Ускорение разработки

• Актуальная документация

Page 6: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

BDD Behavior Driven Development

Page 7: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

7

BDD

• Поведенческое тестирование кода • Тесты BDD:

– Тесты, – Документация, – Примеры использования.

Page 8: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

8

Пример Допустим, мы хотим разработать функцию pow(x, n), которая возводит x в целую степень n, для простоты n≥0. Спецификация: describe("pow", function() {

it("возводит в n-ю степень", function() { assert.equal(pow(2, 3), 8);

}); });

Page 9: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

9

Поток разработки BDD

1. Создание спецификация 2. Реализация спецификации. 3. Запуск тестов it и вывод ошибок, если они

возникнут. При ошибках вносятся исправления. 4. Расширение спецификации

Добавляются возможности, которые не поддерживаются реализацией.

5. Идём на пункт 2, делаем реализацию. И так «до победного конца».

Page 10: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

Инструменты

• Mocha https://mochajs.org/ Общие функции (describe и it)

• Chai http://www.chaijs.com/ Функции для проверок (assert.*)

Page 11: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

11

Запуск тестов

Pow

• при возведении 2 в 3ю степень результат 8 (Тест не пройден)

Page 12: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

12

Начальная реализация function pow() {

return 8; // :-)

}

С точки зрения BDD, ошибка при проходящих тестах – вина спецификации.

Page 13: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

13

Запуск тестов

Pow

• при возведении 2 в 3ю степень результат 8 (Тест пройден)

Page 14: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

Расширение спецификации

Добавить assert it("возводит в n-ю степень", function() {

assert.equal(pow(2, 3), 8);

assert.equal(pow(3, 4), 81);

});

Сделать два теста it("возводит 2 в 3ю степень", function() {

assert.equal(pow(2, 3), 8);

});

it("возводит 3 в 4ю степень", function() {

assert.equal(pow(3, 4), 81);

});

14

Page 15: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

15

Один тест = одна вещь.

• Если assert обнаруживает ошибку, то он тут же прекращает выполнение блока it.

• Поэтому в первом варианте, если вдруг первый assert «провалился», то про результат второго мы никогда не узнаем.

• По этим причинам второй вариант здесь предпочтительнее.

Page 16: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

16

Запуск тестов

Pow

• при возведении 2 в 3ю степень результат 8 (Тест пройден)

• при возведении 3 в 4ю степень резльтат равен 81 (Тест не пройден)

Page 17: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

17

Уточнение реализации function pow(x, n) {

var result = 1;

for (var i = 0; i < n; i++) {

result *= x;

}

return result;

}

Page 18: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

18

Расширение спецификации describe("pow", function() {

function makeTest(x) {

var expected = x * x * x;

it("при возведении " + x + " в степень

3 результат: " + expected, function() {

assert.equal(pow(x, 3), expected);

});

}

for (var x = 1; x <= 5; x++) {

makeTest(x);

}

});

Page 19: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

19

Запуск тестов Pow

• при возведении 1 в степень 3 результат: 1 (Тест пройден)

• при возведении 2 в степень 3 результат: 8 (Тест пройден)

• при возведении 3 в степень 3 результат: 27 (Тест пройден)

• при возведении 4 в степень 3 результат: 64 (Тест пройден)

• при возведении 5 в степень 3 результат: 125 (Тест пройден)

Page 20: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

ASSERT http://www.chaijs.com/api/assert/

Page 21: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

21

Основные assert проверки

• assert(value) – value является true в логическом контексте.

• assert.equal(value1, value2) – равенство value1 == value2.

• assert.strictEqual(value1, value2) – строгое равенство value1 === value2.

• assert.notEqual, assert.notStrictEqual – проверки, обратные двум предыдущим.

• assert.isTrue(value) – value === true • assert.isFalse(value) – value === false

Page 22: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

22

Should проверки

var user = {

name: 'Alexandr',

pets: [‘tuzik',‘murzik','bandit']

};

user.should.have.

property('name', 'Alexandr'); user.should.have.

property('pets').with.lengthOf(3);

Page 23: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

23

Expect проверки

var user = {

name: 'Alexandr',

pets: [‘tuzik',‘murzik','bandit']

};

expect(user).to.have.

property('name', 'Alexandr'); expect(user).to.have.

property('pets').to.have.length(3);

Page 24: Автоматическое тестирование в JavaScript JS Testing.pdf · •Поэтому в первом варианте, если вдруг первый assert «провалился»,

24

Expect проверки

expect(foo).to.be.a('string') expect(foo).to.equal('bar')