Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何测试订阅服务的组件?_Angular_Unit Testing_Jasmine_Observable - Fatal编程技术网

Angular 如何测试订阅服务的组件?

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

我对Angular中的单元测试比较陌生。我正在使用Jasmine,我发现API很模糊。我试图为我的组件编写良好的测试,但我一直在测试订阅服务数据的组件

//组成部分

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([])