Как смоделировать сервис, который содержит статическую переменную? - PullRequest
0 голосов
/ 06 мая 2019

У меня есть вопрос? Как я могу издеваться над сервисом, который содержит статическую переменную?

Это мой сервис

@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 ......

1 Ответ

0 голосов
/ 06 мая 2019

Я очень смущен вашим примером.Как вы тестируете свой сервис, когда вы перекрываете инжектор с насмешкой.Но только учитывая ваш вопрос, я не знаю способа.Доступ к статическому члену не может быть переопределен, только его содержимое.В вашем примере AppConfigService вы могли бы квалифицировать эту службу как одноэлементную, указав в корне:

@Injectable({
  providedIn: 'root'
})

Теперь легко смоделировать эту службу всякий раз, когда вы тестируете что-то с зависимостью от конфигурации вашего приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...