🗊Презентация Автоматические тесты при помощи chai и mocha

Нажмите для полного просмотра!
Автоматические тесты при помощи chai и mocha, слайд №1Автоматические тесты при помощи chai и mocha, слайд №2Автоматические тесты при помощи chai и mocha, слайд №3Автоматические тесты при помощи chai и mocha, слайд №4Автоматические тесты при помощи chai и mocha, слайд №5Автоматические тесты при помощи chai и mocha, слайд №6Автоматические тесты при помощи chai и mocha, слайд №7Автоматические тесты при помощи chai и mocha, слайд №8Автоматические тесты при помощи chai и mocha, слайд №9Автоматические тесты при помощи chai и mocha, слайд №10Автоматические тесты при помощи chai и mocha, слайд №11Автоматические тесты при помощи chai и mocha, слайд №12Автоматические тесты при помощи chai и mocha, слайд №13Автоматические тесты при помощи chai и mocha, слайд №14Автоматические тесты при помощи chai и mocha, слайд №15Автоматические тесты при помощи chai и mocha, слайд №16Автоматические тесты при помощи chai и mocha, слайд №17Автоматические тесты при помощи chai и mocha, слайд №18Автоматические тесты при помощи chai и mocha, слайд №19Автоматические тесты при помощи chai и mocha, слайд №20Автоматические тесты при помощи chai и mocha, слайд №21Автоматические тесты при помощи chai и mocha, слайд №22Автоматические тесты при помощи chai и mocha, слайд №23Автоматические тесты при помощи chai и mocha, слайд №24Автоматические тесты при помощи chai и mocha, слайд №25Автоматические тесты при помощи chai и mocha, слайд №26Автоматические тесты при помощи chai и mocha, слайд №27Автоматические тесты при помощи chai и mocha, слайд №28Автоматические тесты при помощи chai и mocha, слайд №29Автоматические тесты при помощи chai и mocha, слайд №30

Содержание

Вы можете ознакомиться и скачать презентацию на тему Автоматические тесты при помощи chai и mocha. Доклад-сообщение содержит 30 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Автоматические тесты при помощи chai и mocha
Описание слайда:
Автоматические тесты при помощи chai и mocha

Слайд 2





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

При написании функции мы обычно представляем, что она должна делать, какое значение — на каких аргументах выдавать.
В процессе разработки мы, время от времени, проверяем, правильно ли работает функция. Самый простой способ проверить — это запустить её, например, в консоли, и посмотреть результат.
Если что-то не так — поправить, опять запустить — посмотреть результат… И так — «до победного конца».
Но такие ручные запуски — очень несовершенное средство проверки.
Когда проверяешь работу кода вручную — легко его «недотестировать».
Например, пишем функцию f. Написали, тестируем с разными аргументами. Вызов функции f(a) — работает, а вот f(b) — не работает. Поправили код — стало работать f(b), вроде закончили. Но при этом забыли заново протестировать f(a) — упс, вот и возможная ошибка в коде.
Автоматизированное тестирование — это когда тесты написаны отдельно от кода, и можно в любой момент запустить их и проверить все важные случаи использования.
Описание слайда:
Зачем нужны тесты? При написании функции мы обычно представляем, что она должна делать, какое значение — на каких аргументах выдавать. В процессе разработки мы, время от времени, проверяем, правильно ли работает функция. Самый простой способ проверить — это запустить её, например, в консоли, и посмотреть результат. Если что-то не так — поправить, опять запустить — посмотреть результат… И так — «до победного конца». Но такие ручные запуски — очень несовершенное средство проверки. Когда проверяешь работу кода вручную — легко его «недотестировать». Например, пишем функцию f. Написали, тестируем с разными аргументами. Вызов функции f(a) — работает, а вот f(b) — не работает. Поправили код — стало работать f(b), вроде закончили. Но при этом забыли заново протестировать f(a) — упс, вот и возможная ошибка в коде. Автоматизированное тестирование — это когда тесты написаны отдельно от кода, и можно в любой момент запустить их и проверить все важные случаи использования.

Слайд 3





BDD — поведенческие тесты кода

Мы рассмотрим методику тестирования, которая входит в BDD — Behavior Driven Development. Подход BDD давно и с успехом используется во многих проектах.
BDD — это не просто тесты. Это гораздо больше.
Тесты BDD — это три в одном: И тесты И документация И примеры использования одновременно.
Впрочем, хватит слов. Рассмотрим примеры.
Описание слайда:
BDD — поведенческие тесты кода Мы рассмотрим методику тестирования, которая входит в BDD — Behavior Driven Development. Подход BDD давно и с успехом используется во многих проектах. BDD — это не просто тесты. Это гораздо больше. Тесты BDD — это три в одном: И тесты И документация И примеры использования одновременно. Впрочем, хватит слов. Рассмотрим примеры.

Слайд 4





Разработка pow: спецификация
Допустим, мы хотим разработать функцию pow(x, n), которая возводит x в целую степень n, для простоты n≥0.
Ещё до разработки мы можем представить себе, что эта функция будет делать и описать это по методике BDD.
Это описание называется спецификация (или, как говорят в обиходе, «спека») и выглядит так:
Описание слайда:
Разработка pow: спецификация Допустим, мы хотим разработать функцию pow(x, n), которая возводит x в целую степень n, для простоты n≥0. Ещё до разработки мы можем представить себе, что эта функция будет делать и описать это по методике BDD. Это описание называется спецификация (или, как говорят в обиходе, «спека») и выглядит так:

Слайд 5






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

Слайд 6






У спецификации есть три основных строительных блока, которые вы видите в примере выше:
describe(название, function() { ... })
Задаёт, что именно мы описываем, используется для группировки «рабочих лошадок» — блоков it. В данном случае мы описываем функцию pow.
it(название, function() { ... })
В названии блока it человеческим языком описывается, что должна делать функция, далее следует тест, который проверяет это.
assert.equal(value1, value2)
Код внутри it, если реализация верна, должен выполняться без ошибок.
Различные функции вида assert.* используются, чтобы проверить, делает ли pow то, что задумано. Пока что нас интересует только одна из них — assert.equal, она сравнивает свой первый аргумент со вторым и выдаёт ошибку в случае, когда они не равны. В данном случае она проверяет, что результат pow(2, 3) равен 8.
Описание слайда:
У спецификации есть три основных строительных блока, которые вы видите в примере выше: describe(название, function() { ... }) Задаёт, что именно мы описываем, используется для группировки «рабочих лошадок» — блоков it. В данном случае мы описываем функцию pow. it(название, function() { ... }) В названии блока it человеческим языком описывается, что должна делать функция, далее следует тест, который проверяет это. assert.equal(value1, value2) Код внутри it, если реализация верна, должен выполняться без ошибок. Различные функции вида assert.* используются, чтобы проверить, делает ли pow то, что задумано. Пока что нас интересует только одна из них — assert.equal, она сравнивает свой первый аргумент со вторым и выдаёт ошибку в случае, когда они не равны. В данном случае она проверяет, что результат pow(2, 3) равен 8.

Слайд 7





Поток разработки
Как правило, поток разработки таков:
Пишется спецификация, которая описывает самый базовый функционал.
Делается начальная реализация.
Для проверки соответствия спецификации мы задействуем одновременно фреймворк, в нашем случае Mocha вместе со спецификацией и реализацией. Фреймворк запускает все тесты it и выводит ошибки, если они возникнут. При ошибках вносятся исправления.
Спецификация расширяется, в неё добавляются возможности, которые пока, возможно, не поддерживаются реализацией.
Идём на пункт 2, делаем реализацию, и так далее, до победного конца.
Разработка ведётся итеративно, один проход за другим, пока спецификация и реализация не будут завершены.
В нашем случае первый шаг уже завершён, начальная спецификация готова, хорошо бы приступить к реализации. Но перед этим проведём «нулевой» запуск спецификации, просто чтобы увидеть, что уже в таком виде, даже без реализации — тесты работают.
Описание слайда:
Поток разработки Как правило, поток разработки таков: Пишется спецификация, которая описывает самый базовый функционал. Делается начальная реализация. Для проверки соответствия спецификации мы задействуем одновременно фреймворк, в нашем случае Mocha вместе со спецификацией и реализацией. Фреймворк запускает все тесты it и выводит ошибки, если они возникнут. При ошибках вносятся исправления. Спецификация расширяется, в неё добавляются возможности, которые пока, возможно, не поддерживаются реализацией. Идём на пункт 2, делаем реализацию, и так далее, до победного конца. Разработка ведётся итеративно, один проход за другим, пока спецификация и реализация не будут завершены. В нашем случае первый шаг уже завершён, начальная спецификация готова, хорошо бы приступить к реализации. Но перед этим проведём «нулевой» запуск спецификации, просто чтобы увидеть, что уже в таком виде, даже без реализации — тесты работают.

Слайд 8





Пример в действии
Для запуска тестов нужны соответствующие JavaScript-библиотеки.
Мы будем использовать:
Mocha — эта библиотека содержит общие функции для тестирования, включая describe и it.
Chai — библиотека поддерживает разнообразные функции для проверок. Есть разные «стили» проверки результатов, с которыми мы познакомимся позже, на текущий момент мы будем использовать лишьassert.equal.
Sinon — для эмуляции и хитрой подмены функций «заглушками», понадобится позднее.
Эти библиотеки позволяют тестировать JS не только в браузере, но и на сервере Node.JS. Здесь мы рассмотрим браузерный вариант, серверный использует те же функции.
Пример HTML-страницы для тестов:
Описание слайда:
Пример в действии Для запуска тестов нужны соответствующие JavaScript-библиотеки. Мы будем использовать: Mocha — эта библиотека содержит общие функции для тестирования, включая describe и it. Chai — библиотека поддерживает разнообразные функции для проверок. Есть разные «стили» проверки результатов, с которыми мы познакомимся позже, на текущий момент мы будем использовать лишьassert.equal. Sinon — для эмуляции и хитрой подмены функций «заглушками», понадобится позднее. Эти библиотеки позволяют тестировать JS не только в браузере, но и на сервере Node.JS. Здесь мы рассмотрим браузерный вариант, серверный использует те же функции. Пример HTML-страницы для тестов:

Слайд 9






<!DOCTYPE html>
<html>
 
<head>
  <meta charset="utf-8">
 
  <!-- подключаем стили Mocha, для отображения результатов -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.1.0/mocha.css">
  <!-- подключаем библиотеку Mocha -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.1.0/mocha.js"></script>
  <!-- настраиваем Mocha: предстоит BDD-тестирование -->
  <script>
    mocha.setup('bdd');
  </script>
 
  <!-- подключаем chai -->
  <script src="https://cdnjs.cloudflare.com/ajax/libs/chai/2.0.0/chai.js"></script>
  <!-- в chai есть много всего, выносим assert в глобальную область -->
  <script>
    var assert = chai.assert;
  </script>
</head>
Описание слайда:
<!DOCTYPE html> <html>   <head> <meta charset="utf-8">   <!-- подключаем стили Mocha, для отображения результатов --> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.1.0/mocha.css"> <!-- подключаем библиотеку Mocha --> <script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.1.0/mocha.js"></script> <!-- настраиваем Mocha: предстоит BDD-тестирование --> <script> mocha.setup('bdd'); </script>   <!-- подключаем chai --> <script src="https://cdnjs.cloudflare.com/ajax/libs/chai/2.0.0/chai.js"></script> <!-- в chai есть много всего, выносим assert в глобальную область --> <script> var assert = chai.assert; </script> </head>

Слайд 10






<body>
 
  <script>
    function pow(x, n) {
      /* код функции, пока что пусто */
    }
  </script>
 
  <!-- в этом скрипте находятся спеки -->
  <script src="test.js"></script>
 
  <!-- в элементе с id="mocha" будут результаты тестов -->
  <div id="mocha"></div>
 
  <!-- запустить тесты! -->
  <script>
    mocha.run();
  </script>
</body>
 
</html>
Описание слайда:
<body>   <script> function pow(x, n) { /* код функции, пока что пусто */ } </script>   <!-- в этом скрипте находятся спеки --> <script src="test.js"></script>   <!-- в элементе с id="mocha" будут результаты тестов --> <div id="mocha"></div>   <!-- запустить тесты! --> <script> mocha.run(); </script> </body>   </html>

Слайд 11






Эту страницу можно условно разделить на четыре части:
Блок <head> — в нём мы подключаем библиотеки и стили для тестирования, нашего кода там нет.
Блок <script> с реализацией спецификации, в нашем случае — с кодом для pow.
Далее подключаются тесты, файл test.js содержит describe("pow", ...), который был описан выше. Методыdescribe и it принадлежат библиотеке Mocha, так что важно, что она была подключена выше.
Элемент <div id="mocha"> будет использоваться библиотекой Mocha для вывода результатов. Запуск тестов инициируется командой mocha.run().
Результат срабатывания:
Пока что тесты не проходят, но это логично — вместо функции стоит «заглушка», пустой код.
Пока что у нас одна функция и одна спецификация, но на будущее заметим, что если различных функций и тестов много — это не проблема, можно их все подключить на одной странице. Конфликта не будет, так как каждый функционал имеет свой блок describe("что тестируем"...). Сами же тесты обычно пишутся так, чтобы не влиять друг на друга, не делать лишних глобальных переменных.
Описание слайда:
Эту страницу можно условно разделить на четыре части: Блок <head> — в нём мы подключаем библиотеки и стили для тестирования, нашего кода там нет. Блок <script> с реализацией спецификации, в нашем случае — с кодом для pow. Далее подключаются тесты, файл test.js содержит describe("pow", ...), который был описан выше. Методыdescribe и it принадлежат библиотеке Mocha, так что важно, что она была подключена выше. Элемент <div id="mocha"> будет использоваться библиотекой Mocha для вывода результатов. Запуск тестов инициируется командой mocha.run(). Результат срабатывания: Пока что тесты не проходят, но это логично — вместо функции стоит «заглушка», пустой код. Пока что у нас одна функция и одна спецификация, но на будущее заметим, что если различных функций и тестов много — это не проблема, можно их все подключить на одной странице. Конфликта не будет, так как каждый функционал имеет свой блок describe("что тестируем"...). Сами же тесты обычно пишутся так, чтобы не влиять друг на друга, не делать лишних глобальных переменных.

Слайд 12





Начальная реализация
Пока что, как видно, тесты не проходят, ошибка сразу же. Давайте сделаем минимальную реализацию pow, которая бы работала нормально:
function pow() {
  return 8; // :) мы - мошенники!
}
О, вот теперь работает:
Описание слайда:
Начальная реализация Пока что, как видно, тесты не проходят, ошибка сразу же. Давайте сделаем минимальную реализацию pow, которая бы работала нормально: function pow() { return 8; // :) мы - мошенники! } О, вот теперь работает:

Слайд 13





Исправление спецификации
Функция, конечно, ещё не готова, но тесты проходят. Это ненадолго :)
Здесь мы видим ситуацию, которая (и не обязательно при ленивом программисте!) бывает на практике — да, есть тесты, они проходят, но увы, функция работает неправильно.
С точки зрения BDD, ошибка при проходящих тестах — вина спецификации.
В первую очередь не реализация исправляется, а уточняется спецификация, пишется (падающий) тест.
Сейчас мы расширим спецификацию, добавив проверку на pow(3, 4) = 81.
Здесь есть два варианта организации кода:
Первый вариант — добавить assert в тот же it:
Описание слайда:
Исправление спецификации Функция, конечно, ещё не готова, но тесты проходят. Это ненадолго :) Здесь мы видим ситуацию, которая (и не обязательно при ленивом программисте!) бывает на практике — да, есть тесты, они проходят, но увы, функция работает неправильно. С точки зрения BDD, ошибка при проходящих тестах — вина спецификации. В первую очередь не реализация исправляется, а уточняется спецификация, пишется (падающий) тест. Сейчас мы расширим спецификацию, добавив проверку на pow(3, 4) = 81. Здесь есть два варианта организации кода: Первый вариант — добавить assert в тот же it:

Слайд 14






describe("pow", function() {
 
  it("возводит в n-ю степень", function() {
    assert.equal(pow(2, 3), 8);
    assert.equal(pow(3, 4), 81);
  });
 
});
Второй вариант — сделать два теста:
describe("pow", function() {
 
  it("при возведении 2 в 3ю степень результат 8", function() {
    assert.equal(pow(2, 3), 8);
  });
 
  it("при возведении 3 в 4ю степень равен 81", function() {
    assert.equal(pow(3, 4), 81);
  });
 
});
Описание слайда:
describe("pow", function() {   it("возводит в n-ю степень", function() { assert.equal(pow(2, 3), 8); assert.equal(pow(3, 4), 81); });   }); Второй вариант — сделать два теста: describe("pow", function() {   it("при возведении 2 в 3ю степень результат 8", function() { assert.equal(pow(2, 3), 8); });   it("при возведении 3 в 4ю степень равен 81", function() { assert.equal(pow(3, 4), 81); });   });

Слайд 15






Их принципиальное различие в том, что если assert обнаруживает ошибку, то он тут же прекращает выполнение блоки it. Поэтому в первом варианте, если вдруг первый assert «провалился», то про результат второго мы никогда не узнаем.
Таким образом, разделить эти тесты может быть полезно, чтобы мы получили больше информации о происходящем.
Кроме того, есть ещё одно правило, которое желательно соблюдать.
Один тест тестирует ровно одну вещь.
Если мы явно видим, что тест включает в себя совершенно независимые проверки — лучше разбить его на два более простых и наглядных.
По этим причинам второй вариант здесь предпочтительнее.
Результат:
Как и следовало ожидать, второй тест не проходит. Ещё бы, ведь функция всё время возвращает 8.
Описание слайда:
Их принципиальное различие в том, что если assert обнаруживает ошибку, то он тут же прекращает выполнение блоки it. Поэтому в первом варианте, если вдруг первый assert «провалился», то про результат второго мы никогда не узнаем. Таким образом, разделить эти тесты может быть полезно, чтобы мы получили больше информации о происходящем. Кроме того, есть ещё одно правило, которое желательно соблюдать. Один тест тестирует ровно одну вещь. Если мы явно видим, что тест включает в себя совершенно независимые проверки — лучше разбить его на два более простых и наглядных. По этим причинам второй вариант здесь предпочтительнее. Результат: Как и следовало ожидать, второй тест не проходит. Ещё бы, ведь функция всё время возвращает 8.

Слайд 16





Уточнение реализации
Описание слайда:
Уточнение реализации

Слайд 17





Вложенный describe
Описание слайда:
Вложенный describe

Слайд 18






Вложенный describe объявит новую «подгруппу» тестов, блоки it которой запускаются так же, как и обычно, но выводятся с подзаголовком, вот так:
В будущем мы сможем в добавить другие тесты it и блоки describe со своими вспомогательными функциями
Описание слайда:
Вложенный describe объявит новую «подгруппу» тестов, блоки it которой запускаются так же, как и обычно, но выводятся с подзаголовком, вот так: В будущем мы сможем в добавить другие тесты it и блоки describe со своими вспомогательными функциями

Слайд 19





before/after и beforeEach/afterEach
Описание слайда:
before/after и beforeEach/afterEach

Слайд 20





Расширение спецификации
Базовый функционал pow описан и реализован, первая итерация разработки завершена. Теперь расширим и уточним его.
Как говорилось ранее, функция pow(x, n) предназначена для работы с целыми неотрицательными n.
В JavaScript для ошибки вычислений служит специальное значение NaN, которое функция будет возвращать при некорректных n.
Добавим это поведение в спецификацию
Описание слайда:
Расширение спецификации Базовый функционал pow описан и реализован, первая итерация разработки завершена. Теперь расширим и уточним его. Как говорилось ранее, функция pow(x, n) предназначена для работы с целыми неотрицательными n. В JavaScript для ошибки вычислений служит специальное значение NaN, которое функция будет возвращать при некорректных n. Добавим это поведение в спецификацию

Слайд 21


Автоматические тесты при помощи chai и mocha, слайд №21
Описание слайда:

Слайд 22





Другие assert
Обратим внимание, в спецификации выше использована проверка не assert.equal, как раньше, аassert(выражение). Такая проверка выдаёт ошибку, если значение выражения при приведении к логическому типу не true.
Она потребовалась, потому что сравнивать с NaN обычным способом нельзя: NaN не равно никакому значению, даже самому себе, поэтому assert.equal(NaN, x) не подойдёт.
Кстати, мы и ранее могли бы использовать assert(value1 == value2) вместо assert.equal(value1, value2). Оба этих assert проверяют одно и тоже.
Однако, между этими вызовами есть отличие в деталях сообщения об ошибке.
При «упавшем» assert в примере выше мы видим "Unspecified AssertionError", то есть просто «что-то пошло не так», а при assert.equal(value1, value2) — будут дополнительные подробности: expected 8 to equal 81.
Описание слайда:
Другие assert Обратим внимание, в спецификации выше использована проверка не assert.equal, как раньше, аassert(выражение). Такая проверка выдаёт ошибку, если значение выражения при приведении к логическому типу не true. Она потребовалась, потому что сравнивать с NaN обычным способом нельзя: NaN не равно никакому значению, даже самому себе, поэтому assert.equal(NaN, x) не подойдёт. Кстати, мы и ранее могли бы использовать assert(value1 == value2) вместо assert.equal(value1, value2). Оба этих assert проверяют одно и тоже. Однако, между этими вызовами есть отличие в деталях сообщения об ошибке. При «упавшем» assert в примере выше мы видим "Unspecified AssertionError", то есть просто «что-то пошло не так», а при assert.equal(value1, value2) — будут дополнительные подробности: expected 8 to equal 81.

Слайд 23






Поэтому рекомендуется использовать именно ту проверку, которая максимально соответствует задаче.
Вот самые востребованные assert-проверки, встроенные в Chai:
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
…более полный список — в документации
В нашем случае хорошо бы иметь проверку assert.isNaN, но, увы, такого метода нет, поэтому приходится использовать самый общий assert(...). В этом случае для того, чтобы сделать сообщение об ошибке понятнее, желательно добавить к assert описание.
Описание слайда:
Поэтому рекомендуется использовать именно ту проверку, которая максимально соответствует задаче. Вот самые востребованные assert-проверки, встроенные в Chai: 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 …более полный список — в документации В нашем случае хорошо бы иметь проверку assert.isNaN, но, увы, такого метода нет, поэтому приходится использовать самый общий assert(...). В этом случае для того, чтобы сделать сообщение об ошибке понятнее, желательно добавить к assert описание.

Слайд 24


Автоматические тесты при помощи chai и mocha, слайд №24
Описание слайда:

Слайд 25






Теперь результат теста гораздо яснее говорит о том, что не так
В коде тестов выше можно было бы добавить описание и к assert.equal, указав в конце: assert.equal(value1, value2, "описание"), но с равенством обычно и так всё понятно, поэтому мы так делать не будем.
Описание слайда:
Теперь результат теста гораздо яснее говорит о том, что не так В коде тестов выше можно было бы добавить описание и к assert.equal, указав в конце: assert.equal(value1, value2, "описание"), но с равенством обычно и так всё понятно, поэтому мы так делать не будем.

Слайд 26





Итого
Итак, разработка завершена, мы получили полноценную спецификацию и код, который её реализует.
Задачи выше позволяют дополнить её, и в результате может получиться что-то в таком духе:
Описание слайда:
Итого Итак, разработка завершена, мы получили полноценную спецификацию и код, который её реализует. Задачи выше позволяют дополнить её, и в результате может получиться что-то в таком духе:

Слайд 27


Автоматические тесты при помощи chai и mocha, слайд №27
Описание слайда:

Слайд 28


Автоматические тесты при помощи chai и mocha, слайд №28
Описание слайда:

Слайд 29






Эту спецификацию можно использовать как:
Тесты, которые гарантируют правильность работы кода.
Документацию по функции, что она конкретно делает.
Примеры использования функции, которые демонстрируют её работу внутри it.
Имея спецификацию, мы можем улучшать, менять, переписывать функцию и легко контролировать её работу, просматривая тесты.
Особенно важно это в больших проектах.
Бывает так, что изменение в одной части кода может повлечь за собой «падение» другой части, которая её использует. Так как всё-всё в большом проекте руками не перепроверишь, то такие ошибки имеют большой шанс остаться в продукте и вылезти позже, когда проект увидит посетитель или заказчик.
Чтобы избежать таких проблем, бывает, что вообще стараются не трогать код, от которого много что зависит, даже если его ну очень нужно переписать. Жизнь пробивается тонкими росточками там, где должен цвести и пахнуть новый функционал.
Описание слайда:
Эту спецификацию можно использовать как: Тесты, которые гарантируют правильность работы кода. Документацию по функции, что она конкретно делает. Примеры использования функции, которые демонстрируют её работу внутри it. Имея спецификацию, мы можем улучшать, менять, переписывать функцию и легко контролировать её работу, просматривая тесты. Особенно важно это в больших проектах. Бывает так, что изменение в одной части кода может повлечь за собой «падение» другой части, которая её использует. Так как всё-всё в большом проекте руками не перепроверишь, то такие ошибки имеют большой шанс остаться в продукте и вылезти позже, когда проект увидит посетитель или заказчик. Чтобы избежать таких проблем, бывает, что вообще стараются не трогать код, от которого много что зависит, даже если его ну очень нужно переписать. Жизнь пробивается тонкими росточками там, где должен цвести и пахнуть новый функционал.

Слайд 30






Код, покрытый автотестами, являет собой полную противоположность этому!
Даже если какое-то изменение потенциально может порушить всё — его совершенно не страшно сделать. Ведь есть масса тестов, которые быстро и в автоматическом режиме проверят работу кода и, если что-то падает — это можно будет легко локализовать и поправить.
Кроме того, код, покрытый тестами, имеет лучшую архитектуру.
Конечно, это естественное следствие того, что его легче менять и улучшать. Но не только.
Чтобы написать тесты, нужно разбить код на функции так, чтобы для каждой функции было чётко понятно, что она получает на вход, что делает с этим и что возвращает. Это означает ясную и понятную структуру с самого начала.
Конечно, в реальной жизни всё не так просто. Зачастую написать тест сложно. Или сложно поддерживать тесты, поскольку код активно меняется. Сами тесты тоже пишутся по-разному, при помощи разных инструментов.
Описание слайда:
Код, покрытый автотестами, являет собой полную противоположность этому! Даже если какое-то изменение потенциально может порушить всё — его совершенно не страшно сделать. Ведь есть масса тестов, которые быстро и в автоматическом режиме проверят работу кода и, если что-то падает — это можно будет легко локализовать и поправить. Кроме того, код, покрытый тестами, имеет лучшую архитектуру. Конечно, это естественное следствие того, что его легче менять и улучшать. Но не только. Чтобы написать тесты, нужно разбить код на функции так, чтобы для каждой функции было чётко понятно, что она получает на вход, что делает с этим и что возвращает. Это означает ясную и понятную структуру с самого начала. Конечно, в реальной жизни всё не так просто. Зачастую написать тест сложно. Или сложно поддерживать тесты, поскольку код активно меняется. Сами тесты тоже пишутся по-разному, при помощи разных инструментов.



Похожие презентации
Mypresentation.ru
Загрузить презентацию