如何在具有静态变量的服务上使用Jasmine间谍?

时间:2019-05-02 13:47:58

标签: angular jasmine karma-runner

在我的ANGULAR 2应用程序中有一项服务;包含静态引用属性。

export class AppConfigService {
    static settings: IAppConfig;
    constructor(private http: HttpClient) {}

    load() {
        const jsonFile = `assets/config/config.${environment.name}.json`;
        return new Promise<void>((resolve, reject) => {
            this.http.get(jsonFile).toPromise().then((response: IAppConfig) => {
                AppConfigService.settings = response as IAppConfig;
                resolve();
            }).catch((response: any) => {
                reject(`Could not load file '${jsonFile}': ${JSON.stringify(response)}`);
            });
        });
    }
}

这是我要在ts文件中测试的方法的示例实现。

export class SlideImageComponent implements OnInit {
    ......
    readonly baseUrl = AppConfigService.settings.serverApiUrl;
    ......

如何为测试用例模拟静态变量中的数据?每当我尝试以useClass / useValue格式模拟数据时,都会得到AppConfigService.settings.serverApiUrl的未定义值。

1 个答案:

答案 0 :(得分:0)

Typescript静态变量在JS中不存在。

相反,它们绑定到类构造函数。

尝试使用此:

AppConfigService.constructor.settings.serverApiUrl