Cypress пытается импортировать классы из библиотеки SAP UI5 и терпит неудачу

Вопрос или проблема

В моем тесте :

import AbstractDao from "ts/data/dao/AbstractDao";

describe("пример теста", () => {
  it("тест метода", () => {
    AbstractDao.getInstance("busyIndicators");
  });
});

класс AbstractDao имеет зависимость от библиотеки SAP UI5, и я получаю следующую ошибку :

Ошибка: Ошибка компиляции Webpack
Модуль не найден: Ошибка: Не удается разрешить 'sap/ui/model/json/JSONModel' в 'C:\schedule\time-schedule-application\timeschedule\webapp\data'
    at Watching.handle [as handler] (C:\Users\MyAcc\AppData\Local\Cypress\Cache\12.17.4\Cypress\resources\app\node_modules\@packages\server\node_modules\@cypress\webpack-preprocessor\dist\index.js:212:23) 

файл AbstractDao.ts содержит импорт в начале : import Model from "sap/ui/model/Model"; и Model содержит импорт sap/ui/model/json/JSONModel, так что они связаны, и тесты даже не загружаются, и выбрасывается исключение.

Есть ли способ сказать Cypress игнорировать все файлы из библиотеки SAP UI5 ? Моя цель – замокировать возвращаемое значение AbstractDao.getInstance(“busyIndicators”)

Ответ или решение

Для решения проблемы с импортом классов из библиотеки SAP UI5 в тестах Cypress, который вызывает ошибку компиляции, можно воспользоваться несколькими подходами. В данном случае, ваша цель — это замокировать результат вызова метода AbstractDao.getInstance("busyIndicators") и избежать зависимости от SAP UI5. Вот пошаговые рекомендации:

  1. Игнорирование импорта SAP UI5: Можно использовать настройку в Webpack для игнорирования определенных модулей. Если вы используете Webpack в качестве препроцессора для Cypress, вы можете изменить конфигурацию Webpack следующим образом:

    // webpack.config.js
    const webpack = require('webpack');
    
    module.exports = {
       // ... другие настройки ...
       resolve: {
           alias: {
               'sap/ui/model/json/JSONModel': false,
               'sap/ui/model/Model': false
           }
       }
    };

    Это скажет Webpack игнорировать эти модули, что позволит избежать ошибок компиляции.

  2. Создание моков: Вместо того, чтобы зависеть от фактической реализации AbstractDao, вы можете создать мок-объект, который будет возвращать заданные значения. Например:

    // mocks/AbstractDao.js
    class MockAbstractDao {
       static getInstance(model) {
           return {
               // Возвращаем mocked метод или значение
               getValue: () => {
                   return "mockedValue"; // здесь возвращаем нужное вам значение
               }
           };
       }
    }
    export default MockAbstractDao;

    Затем в тестах вы можете использовать этот мок вместо реального импорта:

    import MockAbstractDao from "../mocks/AbstractDao";
    
    describe("sample Test", () => {
       it("test method", () => {
           const instance = MockAbstractDao.getInstance("busyIndicators");
           const value = instance.getValue();
           expect(value).to.equal("mockedValue"); // проверяем возвращаемое значение
       });
    });
  3. Использование Cypress для создания реалистичных моков: Если вы хотите более динамично мокуировать вызовы, вы можете использовать Cypress для создания моков с помощью cy.stub().

    describe("sample Test", () => {
       it("test method", () => {
           cy.fixture('someData').then((data) => {
               const stub = cy.stub(AbstractDao, 'getInstance').returns(data);
    
               // Далее, выполняем любую логику, которая вызывает getInstance
               // И проверяем, что stub сработал
               expect(stub).to.be.calledWith("busyIndicators");
           });
       });
    });
  4. Проверка конфигурации: Убедитесь, что у вас правильно настроен проект Cypress и Webpack. Подключите необходимые зависимости и убедитесь, что пути указаны корректно.

Следуя вышеизложенным шагам, вы сможете устранить проблемы с импортом и успешно замокировать необходимый функционал без необходимости зависеть от SAP UI5.

Оцените материал
Добавить комментарий

Капча загружается...