#angular #unit-testing #jasmine
Вопрос:
Я пытаюсь написать тестовые примеры для компонента, который использует канал среза. Я проверил несколько ссылок, рассказывающих, как имитировать канал для модульного тестирования компонентов. Здесь проблема в том, что это встроенный канал, поэтому я не знаю, каким будет метод преобразования.
lt;tr *ngFor="let item of filteredUsers |slice: (page-1) * pageSize : page * pageSize | searchFilter:searchText "gt; lt;tdgt;lt;input type="checkbox" (change)="onChange(item.id, $event.target.checked)"gt;lt;/tdgt; lt;tdgt;{{item.firstName}}lt;/tdgt; lt;tdgt;{{item.surname}}lt;/tdgt; lt;tdgt;{{item.phoneNumber}}lt;/tdgt; lt;tdgt;{{item.email}}lt;/tdgt; lt;tdgt;{{item.grossIncome}}lt;/tdgt; lt;!-- lt;tdgt;{{item.createdDate | date: 'dd/MM/yyyy' }} lt;/tdgt; --gt; lt;/trgt;
Код для спецификации
describe('fetchUserList()',()=gt;{ it('should get list of users from notification service',()=gt;{ // component.pageSize=10; component.pageOptions=[10,20,50,100]; notificationServiceSpy.fetchUserList.and.returnValue(of({})) fixture.detectChanges(); expect(component.userList.length).toBe(0); expect(component.userList).toEqual(component.filteredUsers); expect(component.userCountLogs.length).toBe(0); expect(notificationServiceSpy.fetchUserList).toHaveBeenCalled(); })
Вот код для крючка ngOnit
ngOnInit() { this.pageOptions=[10,20,50,100]; this.pageSize=this.pageOptions[0]; this.userMappingForm = this.formBuilder.group({ topicId: ['', Validators.required], users: this.formBuilder.array([]) }); this.fetchNotificationTopic(); this.fetchUserList(); }
Вот код для извлечения списка пользователей
fetchUserList() { this.topicList = []; this.notificationService.fetchUserList(null).subscribe((data: any) =gt; { if (data) { this.userList =this.filteredUsers= data; this.userCountLogs = data.length; } }, (err: HttpErrorResponse) =gt; { }); }
Комментарии:
1. SlicePipe должен принимать массив для работы, поэтому я предполагаю, что ошибка возникает из-за того, что вы настраиваете fetchUserList для возврата (наблюдаемого) объекта (пустого в вашем случае, но все еще объекта).
2. Спасибо, что ваше предложение решило мою проблему. Можете ли вы сказать, как я могу обработать HttpErrorResponse в модульном тесте?
3. Проверьте наличие ошибки оператора rxjs throwError.