narqo/bem-pr — pull request #8 by mishaberezin (2013-05-22 20:10:29+00:00)
Title: Реализация сборки тестов

Документацию пока не написал, на случай, если что-то поменяется.

В текущем виде оно работает следующим образом:

### Пользовательское
Папка block.tests оформляется и собирается ровно также как примеры.

В папке block.tests лежат bemjson.js-файлы. Оформляются также как примеры, плюс:
- Нужно добавить подключение *.test.js, по аналогии с подключением обычного js.
- Нужно задекларировать элемент i-bem__test.

Пример:
```
({
block: 'b-page',
head: [
{ block: 'i-jquery', elem: 'core' },
{ elem: 'css', url: '_10-header.css', ie: false },
{ elem: 'js', url: '_10-header.js' },
{ elem: 'js', url: '_10-header.test.js' }
],
mods: { theme: 'normal' },
content: {
block: 'i-bem',
elem: 'test',
content: [
{ block: 'header' }
]
}
})
```

Сами тесты пишутся в технологии test.js. Фреймворк Jasmine.

Пример:
```
BEM.TEST.decl('header', function() {
it('Два умножить на два должно равняться четырем', function() {
expect(2*2).toEqual(4);
});
})
```

Первым параметром в BEM.TEST.decl передается строка или хеш, описывающий bem-сущность (```{block: 'b', elem: 'e', modName: 'pam', modVal: 'pam'}```). Вторым параметром тест.

В страничном файле *.test.js будут борщиковые инклуды всех блочных файлов .test.js, собранных по зависимостям.

Какие конкретно тесты запускать указывается в поле content у i-bem__test в bemjson.js-файле. В примере выше запускается только тест, задекларированный как 'header'. Если не задавать поле content, запустятся все тесты, какие приехали.

Если в блоке есть хотябы одна из технологий (tests, test.js) то будет доступна сборка дефолтного теста. Выглядит все так как будто в блоке есть block.tests/default.bemjson.js с таким содержимым:
```
({
block: "b-page",
head: [
{ block: "i-jquery", elem: "core" },
{ elem: "css", url: "_default.css", ie: false },
{ elem: "js", url: "_default.js" },
{ elem: "js", url: "_default.test.js" }
],
content: {
block: "i-bem",
elem: "test",
content: [
{"block":"block"}
]
}
})
```

### Техническое
Добавлен узел ```TestsLevelNode``` который расширяет ```ExamplesLevelNode```.
Добавлен узел ```TestNode``` который расширяет ```ExampleNode```.

### Сборка
На примере https://github.com/narqo/bl-controls (ветка feature/bem-pr)

Вносим следующие изменения: https://github.com/mishaberezin/bl-controls/commit/abdb7bff6c62876f0ce090a789d7c9eb196a7955

Можно сразу забрать готовый вариант с https://github.com/mishaberezin/bl-controls

Тесты собираются следующим образом:
```
$ git clone git@github.com:mishaberezin/bl-controls
$ cd bl-controls
$ git co tests
$ npm install
$ ./node_modules/.bin/bem make bem-pr
$ ./node_modules/.bin/bem make desktop.sets/attach.tests/01-test
$ ./node_modules/.bin/bem make desktop.sets/attach.tests/default
```