тесты ngx-quill завершаются с ошибкой при использовании Angular 10.2 с Jest после обновления

#angular #jestjs #mocking #ngx-quill

#angular #jestjs #издевательство #ngx-quill

Вопрос:

При обновлении с Angular 9.x до Angular 10.x все спецификации компонентов, использующих компонент quill-editor , ngx-quill не загружаются.

Это производится стандартным тестом angular:

     it('should create', () => {
        expect(component).toBeTruthy();
    });
 

Это сообщение об ошибке, которое они выдают:

  FAIL   my-project  src/(...)/my-component.spec.ts
  ● Test suite failed to run

    Call retries were exceeded

      at ChildProcessWorker.initialize (node_modules/jest-worker/build/workers/ChildProcessWorker.js:193:21)
 

Это происходит, когда в наших представлениях используется простой редактор quill:

 <quill-editor formControlName="myControlName"></quill-editor>
 

(комментирование или удаление этой строки позволяет тестам пройти)

Ранее было достаточно издеваться над модулем quill с jest.mock помощью вызова:

 jest.mock('quill');
 

но теперь тесты просто завершаются неудачей…

мы загружаем QuillModule в общий компонент и импортируем этот общий компонент по мере необходимости:

 @NgModule({
    declarations: [],
    imports: [
        QuillModule.forRoot({
            modules: {
                toolbar: [
                    ['bold', 'italic', 'underline', 'strike'],
                ],
            },
        }),
    ],
    exports: [QuillModule],
})
export class QuillEditorModule {}
 

Ответ №1:

В итоге мы издевались над модулем QuillEditorModule с помощью jest во всех файлах спецификаций, используя наш модуль-оболочку:

Убедившись, что это находится в верхней части ..spec.ts файла, мы смогли отключить модуль ngx-quill и его используемый селектор компонентов «quill-editor», и все тесты снова прошли:

 import { QuillEditorModuleStub } from 'src/(my-app-paths)/quill-editor.module.stub';

jest.mock(`src/(my-app-paths)/quill-editor.module`, () => ({
    __esModule: true,
    QuillEditorModule: QuillEditorModuleStub,
}));
 

Компонент-заглушка

 import { Component, forwardRef } from '@angular/core';
import { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';

@Component({
    selector: 'quill-editor',
    template: '',
    providers: [
        {
            provide: NG_VALUE_ACCESSOR,
            useExisting: forwardRef(() => QuillEditorComponentStub),
            multi: true,
        },
    ],
})
export class QuillEditorComponentStub implements ControlValueAccessor {
    registerOnChange(fn: any): void {}

    registerOnTouched(fn: any): void {}

    writeValue(obj: any): void {}
}
 

Модуль заглушки:

 import { NgModule } from '@angular/core';
import { QuillEditorComponentStub } from './quill-editor-component.stub';

@NgModule({
    declarations: [QuillEditorComponentStub],
    exports: [QuillEditorComponentStub],
})
export class QuillEditorModuleStub {}

 

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

1. Я использовал тот же подход для использования p-editor из PrimeNG, но вместо использования jest.mock я просто использовал QuillEditorModuleStup вместо EditorModule в моем TestBed.imports (и изменил селектор на p-editor, чтобы соответствовать primeng)