Angular 如何测试订阅服务的组件?
我对Angular中的单元测试比较陌生。我正在使用Jasmine,我发现API很模糊。我试图为我的组件编写良好的测试,但我一直在测试订阅服务数据的组件 //组成部分Angular 如何测试订阅服务的组件?,angular,unit-testing,jasmine,observable,Angular,Unit Testing,Jasmine,Observable,我对Angular中的单元测试比较陌生。我正在使用Jasmine,我发现API很模糊。我试图为我的组件编写良好的测试,但我一直在测试订阅服务数据的组件 //组成部分 ngOnInit() { this.store.dispatch(this.loadDatagridDataAction({data: this.authorizations})); this.authorizationService.initAuthorizations(); this.authoriza
ngOnInit() {
this.store.dispatch(this.loadDatagridDataAction({data: this.authorizations}));
this.authorizationService.initAuthorizations();
this.authorizationService.authorizations.subscribe(authorizations => {
this.realAuthorizations = authorizations;
this.realAuthorizations.results.forEach(authorization => {
const formatAuthorization = {};
if (authorization.number) {
formatAuthorization['number'] = authorization.number;
}
if (authorization.status) {
formatAuthorization['status'] = authorization.status;
}
if (authorization.requesting_provider) {
const requestingProvider = flattenObject(authorization.requesting_provider);
formatAuthorization['requesting_provider'] = requestingProvider['name'];
}
if (authorization.servicing_provider) {
const servicingProvider = flattenObject(authorization.servicing_provider);
formatAuthorization['servicing_provider'] = servicingProvider['name'];
}
if (authorization.termination_date) {
formatAuthorization['termination_date'] = authorization.termination_date;
}
this.formattedAuthorizations.push(formatAuthorization);
});
});
}
setActiveTab(tab) {
this.store.dispatch(this.setActiveTabAction({tab}));
}
setActiveRow(row) {
console.log(row);
}
setCurrentPage(page) {
this.store.dispatch(this.setPaginatorCurrentPageAction({page}));
}
goBack(route) {
console.log(route);
}
}
//服务
export class AuthorizationService {
private _authorizations = new Subject<any>();
constructor(
private http: HttpClient,
) { }
public get authorizations() {
return this._authorizations.asObservable();
}
public getAuthorizations() {
const auth = '/api/enrollment/tocs/';
return this.http.get(auth);
}
public initAuthorizations() {
this.getAuthorizations().subscribe(data => {
this._authorizations.next(data);
}, error => {
console.log('Failed to get data', error);
});
}
现在,您的模拟服务不返回任何内容,您的组件希望它返回一个可观察的 在您的测试中,您需要以下行:
authorizationMockService.authorizations.and.returnValue(of([])
请注意,上面的命令使它返回一个带有空数组的可观测值。如果你想返回实际数据,你需要设置它。如果你从
get authorizations()
中删除get
会发生什么?我的函数不起作用,测试也不运行检查这个检查仔细看你的测试,你可能想要和.returnValue(属于[英雄])而不是空数组。
this.authorizationService.authorizations.subscribe(
authorizationMockService.authorizations.and.returnValue(of([])