Добре!
Есть пример как запустить тесты под 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]
]);
cc @blond