Skip to content
This repository was archived by the owner on Apr 11, 2026. It is now read-only.
This repository was archived by the owner on Apr 11, 2026. It is now read-only.

В тестах не работает resolver при подключении других extension-ов #33

Description

@pr0n1x

Например есть два extension-а:

  • vend.commerce-targets (namespace: vend.mod.commerce_targets)
  • vend.logger (namespace: vend.mod.logger)

Допустим мы подключаем в одном из файлов vend.mod.commerce-targets зависимость через import
файл /local/js/vend/mod/commerce-targets/src/services/TargetService.js:

importLogger'vend.mod.logger';exportclassTargetService{targets=[];logger=Logger.getInstance();// ...}

В таком случае в браузере будут внутри объекты
vend.mod.logger и vend.mod.commerce_targets
и все будет корректно (о подгрузке второго extension-а позаботится Битрикс) ибо зависимость автоматом влетает в config.php.

Внутри тестов же import Logger 'vend.mod.logger'; обрабатывается некорректно и приходится вместо внешнего подключения зависимости включать зависимостьи венутрь бандла vend.commerce-targets
слудующим образом:

importLoggerfrom'../../../logger/src/logger';

В противном случае на тестах получаем ошибку обращения к пустому объекту.
В нашем случае она выглядит так
(node:1211857) UnhandledPromiseRejectionWarning: TypeError: _assert.default.getInstance is not a function

В данном примере проблема не велика, но если бы расширения были бы "пожирнее"... В общем закрывать глаза на проблему прям не получаеться

Код @bitrix/cli сами не вычитывали, но есть у нас гипотеза, что виноват даже не резольвер. Результат компиляции дла браузера включет в себя замыкание вида

(function(exports,Logger){/// ...}((this.vend.mod.commerce_targets=this.vend.mod.commerce_targets||{}),vend.mod.logger));

Чутье подсказывает что проблема кроется где-то вокруг работы с this - но это тыкание пальцем в небо.

Вот ещё любопытный момент. Если написать так

importLoggerfrom'vend.mod.logger';exportclassTargetService{// targets = [];// logger = Logger.getInstance();constructor(){console.dir(typeofLogger);console.dir(Logger.name);throw'Stop here';}

Выдает вот такой результат. Очень похоже что import вернул нам какой-то объект mocha вместо нашего логгера.

function
ok
{ [Function: ok]
fail: [Function: fail],
AssertionError: [Function: AssertionError],
ok: [Circular],
equal: [Function: equal],
notEqual: [Function: notEqual],
deepEqual: [Function: deepEqual],
notDeepEqual: [Function: notDeepEqual],
deepStrictEqual: [Function: deepStrictEqual],
notDeepStrictEqual: [Function: notDeepStrictEqual],
strictEqual: [Function: strictEqual],
notStrictEqual: [Function: notStrictEqual],
...

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions