【发布时间】:2021-01-07 12:15:37
【问题描述】:
我在为单元测试模拟弹出数据时遇到了麻烦。收到如下错误:TypeError: Cannot read property 'showFilterModal' of undefined 我做错了什么?
过滤器组件
public openFilterModal() {
this.filterModal = this.modalService.showFilterModal(this.filtersOptions, this.userRole, 'bills');
this.filterModal.afterClosed
.subscribe(
(result) => {
this.selectedFiltersAmount = result.total;
this.filtersOptions = result.filters;
},
(err) => {
});
}
这个想法是创建具有必要的可观察对象和功能的假服务。非常感谢@Naren
正确的测试模拟:
describe('Component', () => {
let component: Component;
let fixture: ComponentFixture<Component>;
const mockModelService = {
showFilterModal:
jasmine.createSpy('showFilterModal').and.returnValue({
afterClosed: of({
total: 1,
filters: null,
reqObj: {
status: 'active',
}
})})
};
beforeEach(() => {
TestBed.configureTestingModule({
imports: [NecessaryModules],
providers: [
{ provide: LocalModalService, useValue: mockModelService }
],
declarations: [ Component]
}).compileComponents();
fixture = TestBed.createComponent(Component);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should create subscription after close modal', () => {
component.openFilterModal();
expect(mockModelService.showFilterModal).toHaveBeenCalled();
expect(component.selectedFiltersAmount).toBe(1);
});
});
【问题讨论】: