Модульное тестирование играет решающую роль в обеспечении качества и стабильности программных приложений. Однако в процессе тестирования нередко встречаются ошибки. Одной из таких ошибок, которая может возникнуть при модульном тестировании с помощью Jasmine и Karma, является ошибка «CUSTOM_ELEMENTS_SCHEMA». В этой статье блога мы рассмотрим эту ошибку, поймем ее основные причины и предложим несколько способов ее устранения и устранения.
Что такое ошибка «CUSTOM_ELEMENTS_SCHEMA».
Ошибка «CUSTOM_ELEMENTS_SCHEMA» обычно возникает в приложениях Angular при использовании Angular TestBed, Jasmine и Karma для модульного тестирования. Обычно это происходит, когда тестируемый компонент содержит пользовательский элемент или веб-компонент, который Angular не распознает. Эта ошибка может помешать успешному выполнению модульного теста, что приведет к разочарованию и задержкам в процессе тестирования.
Методы устранения ошибки:
- Импортируйте необходимый модуль:
Убедитесь, что необходимый модуль, определяющий пользовательский элемент, импортирован в конфигурацию TestBed. Например, если вы используете пользовательский элемент с именем «my-custom-element», вы можете импортировать его модуль в конфигурацию TestBed следующим образом:
import { MyCustomElementModule } from 'path/to/my-custom-element.module';
beforeEach(async () => {
await TestBed.configureTestingModule({
imports: [MyCustomElementModule],
// ... other configurations
}).compileComponents();
});
- Объявите схему настраиваемого элемента:
В тестируемом компоненте объявите схему настраиваемого элемента как часть конфигурации TestBed. Это сообщает Angular игнорировать любые нераспознанные элементы во время теста. Вот пример:
beforeEach(async () => {
await TestBed.configureTestingModule({
schemas: [CUSTOM_ELEMENTS_SCHEMA],
// ... other configurations
}).compileComponents();
});
- Используйте NO_ERRORS_SCHEMA:
Если пользовательский элемент не является важной частью модульного теста, вы можете использовать NO_ERRORS_SCHEMA в конфигурации TestBed. Эта схема позволяет передавать любые элементы и атрибуты HTML без возникновения ошибок. Однако будьте осторожны при использовании этого подхода, поскольку он может скрыть потенциальные проблемы, связанные с пользовательским элементом.
import { NO_ERRORS_SCHEMA } from '@angular/core';
beforeEach(async () => {
await TestBed.configureTestingModule({
schemas: [NO_ERRORS_SCHEMA],
// ... other configurations
}).compileComponents();
});
- Имитация пользовательского элемента:
Если пользовательский элемент не имеет отношения к текущему модульному тесту, вы можете имитировать его с помощью функции Jasmine spyOn(). Это позволяет вам создать фиктивную реализацию пользовательского элемента, предотвращая любые связанные с ним ошибки. Вот пример:
beforeEach(async () => {
spyOn(window, 'customElementFunction').and.returnValue(/* mocked value */);
// ... other configurations
await TestBed.configureTestingModule({
// ... configurations
}).compileComponents();
});
Ошибка «CUSTOM_ELEMENTS_SCHEMA» может стать препятствием при модульном тестировании приложений Angular с помощью Jasmine и Karma. Однако, вооружившись методами, изложенными в этой статье, вы сможете эффективно устранить и устранить эту ошибку. Импортировав необходимый модуль, объявив схему пользовательского элемента, используя NO_ERRORS_SCHEMA или имитируя пользовательский элемент, вы можете обеспечить бесперебойные рабочие процессы модульного тестирования и надежное тестирование приложений.