From 809c260c19b8e6944bd43356e3a8113b61d96be2 Mon Sep 17 00:00:00 2001 From: Alexander Ivanov Date: Mon, 22 Jul 2019 22:06:46 +0300 Subject: [PATCH] aaa Signed-off-by: Alexander Ivanov --- README.russian.md | 2 +- sections/testingandquality/aaa.russian.md | 61 +++++++++++++++++++++++ 2 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 sections/testingandquality/aaa.russian.md diff --git a/README.russian.md b/README.russian.md index 246696a0..a5cd22c9 100644 --- a/README.russian.md +++ b/README.russian.md @@ -459,7 +459,7 @@ null == undefined // true **Иначе:** Не только вы тратите долгие ежедневные часы на понимание основного кода, теперь и то, что должно было быть простой частью дня (тестирование), напрягает ваш мозг. -🔗 [**Read More: Structure tests by the AAA pattern**](/sections/testingandquality/aaa.md) +🔗 [**Read More: Structure tests by the AAA pattern**](/sections/testingandquality/aaa.russian.md)

diff --git a/sections/testingandquality/aaa.russian.md b/sections/testingandquality/aaa.russian.md new file mode 100644 index 00000000..4fb21221 --- /dev/null +++ b/sections/testingandquality/aaa.russian.md @@ -0,0 +1,61 @@ +# Структурируйте тесты по шаблону AAA + +

+ +### Объяснение в один абзац +Нашей самой большой проблемой тестирования является отсутствие свободного пространства - у нас уже есть производственный код, который заставляет нас быть очень занятыми. По этой причине тестовый код должен оставаться очень простым и легким для понимания. При чтении контрольного примера - это не должно восприниматься как чтение императивного кода (циклы, наследование), а скорее как HTML - декларативный опыт. Чтобы добиться этого, придерживайтесь соглашения AAA, чтобы читатели могли легко проанализировать тест. В этом шаблоне есть и другие похожие форматы, такие как XUnit "Setup, Excercise, Verify, Teardown". Это три А: + +Первая A - Arrange: Весь код установки, чтобы привести систему к сценарию, который тест должен симулировать. Это может включать создание экземпляра тестируемого модуля, добавление записей БД, обертки/зацепки над объектами и любой другой подготовительный код. + +Вторая A - Act: Выполнить тестируемый модуль. Обычно 1 строка кода + +Третья A - Assert: убедитесь, что полученное значение соответствует ожидаемому. Обычно 1 строка кода + + +

+ +### Пример кода: тест, структурированный по шаблону AAA +```javascript +describe.skip('Customer classifier', () => { + test('When customer spent more than 500$, should be classified as premium', () => { + //Arrange + const customerToClassify = {spent:505, joined: new Date(), id:1} + const DBStub = sinon.stub(dataAccess, "getCustomer") + .reply({id:1, classification: 'regular'}); + + //Act + const receivedClassification = customerClassifier.classifyCustomer(customerToClassify); + + //Assert + expect(receivedClassification).toMatch('premium'); + }); +}); +``` + +

+ +### Пример кода - Антипаттерн: нет разделения, сплошной объем, труднее интерпретировать +```javascript +test('Should be classified as premium', () => { + const customerToClassify = {spent:505, joined: new Date(), id:1} + const DBStub = sinon.stub(dataAccess, "getCustomer") + .reply({id:1, classification: 'regular'}); + const receivedClassification = customerClassifier.classifyCustomer(customerToClassify); + expect(receivedClassification).toMatch('premium'); + }); +``` + +

+ +### "Включите 6 частей в каждом тесте" + + [From the blog "30 Node.js testing best practices" by Yoni Goldberg](https://medium.com/@me_37286/yoni-goldberg-javascript-nodejs-testing-best-practices-2b98924c9347) + + ![A test report example](/assets/images/6-parts-in-test.jpg "A test report example") + +

+ +### "Для читателя теста важно иметь возможность быстро определить, какое поведение проверяет тест" +Из книги [XUnit Patterns](http://xunitpatterns.com/Four%20Phase%20Test.html): + +> Для читателя теста важно иметь возможность быстро определить, какое поведение проверяет тест. Это может быть очень запутанным, когда вызываются различные варианты поведения тестируемой системы (SUT), некоторые для настройки предтестового состояния (фиксатора) SUT, другие для проверки SUT и третьи для проверки пост-теста состояние СУТ. Четкое определение четырех фаз значительно облегчает понимание цели теста.