Angular Функция прототипа тестирования кармы - PullRequest
1 голос
/ 06 февраля 2020

Когда я пытаюсь запустить тест ng, я получаю сообщение об ошибке, что

Свойство 'myFunction' не существует для типа 'FormArray'

И это свойство, которое было добавлено в app.module.ts, чтобы сделать его глобальным.

И это прототип для расширения AbstractControl добавлением myFunction, чтобы его можно было вызывать для объектов AbstractControl. (сделано точно так же, как здесь { ссылка })

Что я могу сделать, чтобы заставить Карму признать, что она используется правильно или игнорировать ее?

edit: Full error :

ОШИБКА в приложении / modules / settings / components / some-folder / some-folder2 / some-folder3 / some-folder4 / myComponent.component.ts: 74: 23 - ошибка TS2339: свойство myFunction не существует для типа «FormArray».

74 myFormArray.addValidators ([MyValidator (someList)]);

1 Ответ

2 голосов
/ 06 февраля 2020

Когда вы запускаете тест, app.module не импортируется неявно, поэтому код, в котором вы расширяете прототип, не запускается.

Таким образом, вы либо

  • импортировать все app.module в ваш TestBed.configureTestingModule, что не является хорошей практикой, поскольку он извлекает все зависимости
  • или создает модуль тестирования, в котором вы запускаете код расширения прототипа и импортируете только необходимые зависимости (например, модуль форм (который содержит FormArray) и, возможно, некоторые компоненты или службы)
  • или просто запустите прототип расширяющего кода в beforeEach, так что к тому времени ваши тесты нажмите на часть, где есть формы, прототип уже расширен
beforeEach(() => {
    // just paste the prototype extending code here, something like the following
    AbstractControl.prototype.myFunction = () => {
        // ...
    }

    // or even better, if you extracted the function above to somewhere
    extendAbstractControl();
});`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...