У меня есть проект Angular, в котором я использую фреймворк Clarity Design UI. Мой проект использует компонент DataGrid от Clarity и прослушивает его clrDgRefresh
EventEmitter
, который срабатывает в ответ на изменения базовых данных или взаимодействия с пользователем. Я пишу тесты для компонента, который включает в себя изменения, которые запускают этот EventEmitter
, и я пытаюсь выяснить, как заглушить обратный вызов этих событий, чтобы они не запускались во время тестирования. Как я могу это сделать?
Шаблон моего компонента содержит
<clr-datagrid (clrDgRefresh)="dgRefresh($event)">
где @Output
в компоненте DataGrid Clarity равен
@Output('clrDgRefresh') public refresh = new EventEmitter<ClrDatagridStateInterface<T>>(false);
и мой компонент имеет что-то вроде
@Debounce(400)
dgRefresh(event: any) {
this.doSomething();
}
где я хочу заглушить doSomething
в тестах (или просто запретить его вызов).
Мой файл спецификаций имеет:
TestBed.configureTestingModule({
imports: [
ClarityModule,
...
],
...
})
.compileComponents();
Я не могу просто spyOn(component, 'doSomething')
, так как он заглушает только прямые вызовы функции, а не те, которые запускаются асинхронно через Clarity. Я также не могу сделать что-то , как это , так как я использую весь модуль, а не только один компонент.
Я также попытался получить экземпляр компонента DataGrid, созданного внутри моего компонента, и заглушить его с помощью
let datagridDebugElement = fixture.debugElement.query(By.css('.datagrid'));
let datagrid = datagridDebugElement.componentInstance;
spyOn(datagrid, 'refresh');
Но это также не работает (doSomething
все еще вызывается). Как правильно подойти к этому?