【发布时间】:2018-01-22 14:56:02
【问题描述】:
我为我的测试创建了一个模拟服务,但我想测试在一个测试中发生错误时会发生什么以及该错误的后果。在 Java 中,当我使用模拟服务时,我可以拥有,对于特定的测试方法,模拟服务通过使用 when(mockservice.method).thenReturn(error) 返回错误,我不确定如何在 Jasmine 中执行等效操作。到目前为止,这是我所拥有的:
class MockManagerService {
@Output()
selectedEventObject: EventEmitter<any> = new EventEmitter();
getAlertsAndMessagesData(): Observable<any> {
const data = {alerts: ''};
return Observable.of(data);
}
}
describe('DataComponent', () => {
let component: DataComponent;
let fixture: ComponentFixture<DataComponent>;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ DataComponent ],
imports: [DataTableModule, HttpClientModule],
providers: [
{
provide: ManagerService,
useClass: MockManagerService
}
]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(DataComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
it('should be created', () => {
expect(component).toBeTruthy();
});
});
我要测试的 ManagerService 代码部分是这样的:
err => {
this.managerService.processError(err);
this.managerService.userLoggedIn.emit(false);
});
我不需要测试.processError 方法是否能实现它的功能,但我想看看是否发出了事件。
有没有办法做到这一点:
it('should process error', () => {
// Java psuedo code to explain what I want to do in JavaScript
when(MockManagerService.methodThatThrowsError).thenReturn(error);
verify(event emitted to userLoggedIn emitter)
}
【问题讨论】:
标签: angular karma-jasmine