Модульное тестирование логики приложения Nativescript в браузере

#unit-testing #angular-cli #nativescript #nativescript-angular

#модульное тестирование #angular-cli #nativescript #nativescript-angular

Вопрос:

Я пытаюсь настроить модульное тестирование для приложения Nativescript, запускаемого ng test в браузере. Проблема в том, что всякий раз, когда происходит tns-core-modules импорт другого плагина, модуль не может быть разрешен из-за файлов, специфичных для платформы (например, «tns-core-modules/application/application.android.js «), которые никогда не компилируются в пакет, что приводит к ошибке типа «Модуль не найден: ошибка: не удается разрешить ‘tns-core-modules / application'».

Я знаю, что в Nativescript есть встроенная поддержка модульного тестирования. Проблема, с которой я сталкиваюсь, заключается в том, что он не может запускаться на CI. Я хотел бы иметь возможность проводить облегченные тесты для своей бизнес-логики, устраняющие все зависимости от платформы. Я безуспешно искал способ имитировать импорт модуля во время выполнения. Я заглянул в rewire пакет, но он запускается только на node.

Ответ №1:

Наконец-то мне удалось заставить его работать. Не очень элегантное решение, и мне еще предстоит увидеть, сколько обслуживания оно требует. Ключевые моменты здесь:

  1. Используйте paths раздел tsconfig.json для добавления фиктивных местоположений импорта
  2. В каталоге mocks создайте файлы для любого неразрешенного модуля
  3. Некоторые модули nativescript ссылаются на вспомогательные функции в глобальной области видимости, но они не определены. Мое решение состояло в том, чтобы определить их в test.ts таком виде
 window['__decorate'] = () => {};
window['__extends'] = () => {};
window['__metadata'] = () => {};
window['__param'] = () => {};
window['layout_base_1'] = { CSSType: () => {} };
window['Crashlytics'] = {};
window['Fabric'] = {};
  

Комментарии:

1. вы все еще используете это решение или, может быть, нашли что-то более надежное?

2. @ForestG Я все еще использую это решение. Это работает довольно хорошо, и после завершения начальной работы накладных расходов не так уж много.

Ответ №2:

Вы просто не можете запустить приложение NativeScript в браузере.

На случай, если вы ищете что-то вроде безголового режима, у Appium тоже есть такой, isHeadless по возможностям.

Между тем, могу я узнать, почему, по вашему мнению, вы не можете запустить модульные тесты {N} на CI? Это должно работать и на CI, в конце концов, это машина, которая выполняет те же команды на основе некоторого триггера.

Комментарии:

1. 1. Хотя невозможно запустить все приложение в браузере, определенно возможно запустить изолированный javascript с имитируемыми зависимостями. Моя цель — протестировать бизнес-логику (не компоненты, не встроенную интеграцию). Мне это удалось, и я опубликую принятый ответ, когда закончу. 2. Appium предназначен для e2e, а не для модульного тестирования 3. Эмуляторы Android не могут запускаться на Travis CI, только на iOS. Я также увидел некоторые проблемы с TestBed, но решил, что для меня этого недостаточно.