Хотите следить за методом, который инициализируется в методе onInit - PullRequest
0 голосов
/ 28 декабря 2018

Я хочу проверить свой компонент customForm, который использует компонент из другой библиотеки. Сначала я хочу проверить, что мой компонент инициализировал компонент вложенной библиотеки.Позвольте мне показать пример:

 @Component({
  selector: 'iris-field-editor',
  template `<span>SomeMarkup</span><editorLibrary [init]="init">` ,
  providers: [
    {
      provide: NG_VALUE_ACCESSOR,
      useExisting: forwardRef(() => IrisFieldEditorComponent),
      multi: true
    }
  ],
  changeDetection: ChangeDetectionStrategy.OnPush
})
export class IrisFieldEditorComponent implements OnInit, 
ControlValueAccessor {

  constructor() {
  }

  ngOnInit() {
    this.init = {
      height: '20px',
      autoresize_min_height: '20px',
      autoresize_max_height: '600px',
      someOtherSettings,
      setup: (editor) => {
        editor.on('focus',  (e) => {
           //dom manipulation logic
        });

        editor.on('blur', (e) => {
          //dom manipulation logic
        });
      }
    }
  }
}

Я пытался использовать spyOn(component.init,'setup'); expect(component.init.setup).toHaveBeenCalled(), но получил error: <spyOn> : setup() method does not exist. Как я могу протестировать метод, который инициализируется позже в ngOnInit?

Также я хотел протестировать редактор.on функции внутри функции установки, так что маленький совет, как я могу это сделать?

1 Ответ

0 голосов
/ 03 января 2019

Это зависит.

Если логика внутри ngOnInit имеет некоторые последствия, из-за которых мой тестируемый юнит должен держать его подотчетным, то я бы организовал свой тестовый случай, позвонив ngOnInit перед действием.Но это, конечно, сделает их зависимыми.Любые изменения в ngOnInit коснутся и тестируемого устройства.

Итак, я надеюсь, что вашему тестируемому устройству все равно, что делает ngOnInit, а взаимодействует только с this.init.setup.В этом случае я бы создал шпионский объект через jasmine.createSpyObj или просто издевался над this.init.setup и шпионил за ним.

it('call setup', () => {
  // with mock function then spy on
  comp.init = { setup: () => {} };
  spyOn(comp.init, 'setup');

  comp.myUnitUnderTest(); // or some kind of actions

  expect(comp.init.setup).toHaveBeenCalled();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...