30
Я.Субботник, Москва, 8 сентября 2012 года Разработчик интерфейсов Александр Тармолов БЭМ и JavaScript: Тестирование

БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

  • Upload
    others

  • View
    16

  • Download
    0

Embed Size (px)

Citation preview

Page 1: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

Я.Субботник, Москва, 8 сентября 2012 года

Разработчик интерфейсовАлександр Тармолов

БЭМ и JavaScript: Тестирование

Page 2: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

2

юнит-тестирование

что такое i-bem__test

как он работает

Page 3: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

Плюсы юнит-тестов

3

Page 4: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

4

модульное тестирование

код работает

безопасный рефакторинг

быстрая разработка (потом)

тесты — это документация

Page 5: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

Мифы о юнит-тестах

5

Page 6: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

6

юнит-тесты ловят всё

я — крутой программист

тесты — много времени

Page 7: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

Как писать?

7

Page 8: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

8

юнит-тест — один код

тестируем состояния, не код

моки для внешних сервисов

независимые тесты

Page 9: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

i-bem__test

9

Page 10: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

10

простое добавление тестов

сборка с помощью bem-make

тесты — часть БЭM

запуск из консоли и браузера

инфраструктура для тестов

Page 11: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

Что под капотом?

11

Page 15: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

15

компактный синтаксис

BDD

нет зависимостей

много готовых матчеров

Page 18: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

18

Page 19: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

19

Как это работает?

Page 20: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

20

Пишем БЭМ-декларацию

$ bem create block -t js i-batman

BEM.decl(‘i-batman’, {

getName: function () {return ‘Batman’;

}

});

Page 21: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

21

Пишем БЭМ-тест

$ bem create block -t test.js i-batman

BEM.TEST.decl('i-batman', function () { var block = BEM.create('i-batman');

it('requires proper name', function(){var batmanName = block.getName();expect(batmanName).toEqual(‘Batman’);

});

});

Page 22: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

22

Запускаем

$ make test

Started....................Finished in 0.005 seconds.Specs total: 1Failed: 0

Page 23: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

23

Тесты не прошли :(

http://localhost/tests/unit/unit.html

$ make test

StartedFi-batman -> requires proper nameFinished in 0.005 seconds.Specs total: 1Failed: 1

Page 24: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

24

make test?

TESTS_DIRS ?= blocks

test: $(TESTS_DIRS)$(BEM) make testsphantomjs \ $(PHANTOM_RUNNER)\tests/unit/unit.html

Page 25: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

25

pre-commit hook

TESTS_DIRS=$(git diff --cached --name-only --diff-filter=ACMR | awk '/.js$/{gsub("/[^/]+.js",""); s=s " " $0} END {print s}')

if [ "$TESTS_DIRS" ]; then make test TESTS_DIRS="$TESTS_DIRS" if [ $? -ne 0 ]; then exit 1 fi fi

Page 27: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

27

Стенд с i-bem__test

Page 28: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

28

Повторим...

Page 29: БЭМ и JavaScript: Тестированиеcache-ash03.cdn.yandex.net/download.yandex.ru/company/...сборки и запуска тестов юнит-тесты — еще одна

29

юнит-тесты — это помощь, а не наказание (но не «серебряная пуля»)

i-bem__test — это инфраструктура для создания, сборки и запуска тестов

юнит-тесты — еще одна технология в рамках БЭМ

запуск тестов из консоля и браузера

быстрое добавление тестов и их запуск

юнит-тестирование — это очень просто :)