Шутливое тестирование с угловым ионным хранилищем не удается

#jestjs #ionic5 #ts-jest #angular11

Вопрос:

Привет, я использую angular 11 и ionic 5 ;

для ионного хранилища я использую модуль @ionic/storage-angular:^3.0.6.

во время шутливых модульных тестов я получаю

Не удается найти модуль «@ionic/хранилище » из «node_modules/@ionic/storage-angular/bundles/ionic-storage-angular.umd.js’

@ionic/storage-angular-это зависимость в одном из сервисов, над которым я издевался

jest.confi.js имеет

 transformIgnorePatterns: [
    './node_modules/(?!@ionic|ngx-socket-io/|!@ionic/storage-angular)'
]
 

файл спецификации, издевающийся над сервисом

 let storeServiceStub={
  get:jest.fn().mockResolvedValue({})
};

await TestBed.configureTestingModule({
      declarations: [ DataSyncComponent ],
      providers:[
        { provide: StoreService, useValue: storeServiceStub },
      ]
})
.compileComponents();
 

@ionic/хранение-угловой-это служба хранения, которую я заменяю заглушкой;

тестирование env для репо пакета ошибок.json

 dependencies:{
  ...
  "@ionic/storage-angular": "^3.0.6",
  ...
}
devDependencies:{
  ...
  "jest": "^27.0.3",
  "jest-preset-angular": "^9.0.1",
  "@types/jest": "^26.0.23",
  ...

}
 

узел v 14
ос osx 11.2.2

Ответ №1:

Я могу исправить это, добавив следующую конфигурацию в свой jest.config.js

 moduleNameMapper: {
        '^@ionic/storage': '<rootDir>/node_modules/@ionic/storage/dist/esm/index.d.ts',
    }, 
 

Очень похоже на ответ от @Ferraria. Но имя модуля начинается с символа^, а путь заканчивается индексом.d.ts.

Моя полная конфигурация такова

 module.exports = {
    "preset": "jest-preset-angular",
    "setupFilesAfterEnv": ["<rootDir>/setup-jest.ts"],
    "transformIgnorePatterns": [
        "node_modules/(?!@ngrx|@ionic-native|@ionic)"
    ],
    moduleNameMapper: {
        '^@ionic/storage': '<rootDir>/node_modules/@ionic/storage/dist/esm/index.d.ts',
    },
    setupFiles: ["jest-canvas-mock"]
};
 

 

Ответ №2:

Предоставьте jest moduleNameMapper для @ionic/хранения в вашем jest.config.js вот так:

     ...,
    transformIgnorePatterns: [
      './node_modules/(?!@ionic|ngx-socket-io/|!@ionic/storage-angular)'
    ],
    "moduleNameMapper": {
      "@ionic/storage": "<rootDir>/node_modules/@ionic/storage/dist/esm"
    }
 

Вы можете найти дополнительную информацию для moduleNameMapper здесь.

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

1. я попробовал это, я получаю «Синтаксическую ошибку: невозможно использовать оператор импорта вне модуля для локального сервера, который зависит от @ionic/storage-angular».