如何模拟包含静态变量的服务



我有一个问题吗?如何模拟包含静态变量的服务?

这是我的服务

@Injectable()

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)}`);
            });
        });
    }
}

这是我的单位测试代码:

describe('AppConfigService', () => {
    let service: AppConfigService;
    beforeEach(() => {
        TestBed.configureTestingModule({
            imports: [
                HttpClientTestingModule
            ],
            providers: [
                {provide: AppConfigService, useClass: MockAppConfigService}
            ]});
        service = TestBed.get(AppConfigService);
    });
    it('should be created', () => {
        expect(service).toBeTruthy();
    });
    it('should ran load well', () => {
        expect(service.settings)......;
    });

我无法使用service.settings,因为设置是AppConfigservice的静态成员......

我对您的示例感到非常困惑。用模拟覆盖喷油器时,如何测试服务。但是仅考虑您的问题,我就不知道。仅仅是其内容,无法覆盖静态成员的访问。在您的AppConfigservice示例中,您可以通过在根中提供该服务作为单身人士的资格:

@Injectable({
  providedIn: 'root'
})

现在,每当您测试具有依赖性的应用程序配置时,可以轻松模拟此服务。

最新更新