Войти с помощью github
Форум /

Добре!

Есть пример как запустить тесты под BH engine

https://github.com/enb/enb-bem-specs/blob/master/examples/silly/.enb/make.js

Но как выяснилось это не работает.

Смотрите. Мне важно, чтобы блок был добавлен в html до исполнения JS.

зовут его b-legend

Для того, чтобы он попал в тесты используется специальный слой переопределения

app-specs.blocks где и лежит спец файл BH

app-specs.blocks/b-legend/b-legend.bh.js

Внутренность у него проста:

module.exports = function(bh) {
    bh.match('spec-content', function () {
        return {block: 'b-legend'};
    });
};

И да используется библиотека bem-pr где существует блок spec-content, переопределяя который по идее внутри должны получить блок b-legend.

Все бы хорошо, но не работает сборка bemdecl файлов в enb-bem-specs.

Добавил слои:

layers = [
   'app.blocks',
   'app-specs.blocks'
];

specs.configure({
    langs: false,
    destPath: 'specs',
    levels: layers,
    templateEngine: {
        templateTech: require('enb-bh/techs/bh-bundle'),
        templateOptions: {
            devMode: false
        },
        htmlTech: require('enb-bh/techs/bemjson-to-html'),
        htmlTechOptionNames: { bemjsonFile: 'bemjsonFile', templateFile: 'bhFile' }
    },
    sourceLevels: [
        { path: 'libs/bem-pr/spec.blocks', check: false }
    ].concat(layers),

    jsSuffixes: ['js'],
    specSuffixes: ['spec.js']
});

Запустил таск, появилась куча файлов в spec/b-legend:

И даже b-legend.base.bemdecl.js, содержит нужный блок. Но после всех mergeDeps, mergeDecl этот блок не попал в сборку BH. Но попал в сборку JS.

Оказывается вся загвоздка в том, что при сборке HTML, не учитывается базовая зависимость ?.base.bemdecl.js и следовательно ?.bemdecl.js

Что может спасти ситуацию?

Добавить эти зависимости для сборки html используя mergeDeps:

// Client BEMHTML
        nodeConfig.addTechs([
            [depsByTechToBemdecl, {
                target: '?.js.template.bemdecl.js',
                sourceTech: 'js',
                destTech: 'bemhtml'
            }],
            [depsByTechToBemdecl, {
                target: '?.spec-js.template.bemdecl.js',
                sourceTech: 'spec.js',
                destTech: 'bemhtml'
            }],
            [mergeBemdecl, {
                target: '?.template.bemdecl.js',
                sources: [
                    '?.js.template.bemdecl.js',
                    '?.spec-js.template.bemdecl.js',
                    '?.bemjson.bemdecl.js'
                ]
            }],
            [depsTech, {
                target: '?-pre.template.deps.js',
                bemdeclFile: '?.template.bemdecl.js'
            }],
            [mergeDeps, {
                target: '?.template.deps.js',
                sources: ['?.bemdecl.js', '?-pre.template.deps.js']
            }],
            [files, {
                depsFile: '?.template.deps.js',
                filesTarget: '?.template.files',
                dirsTarget: '?.template.dirs'
            }],
            [templateEngine.templateTech, templateEngineOpts]
        ]);