Как мне издеваться над глобальной переменной для модульного тестирования в Жасмин? - PullRequest
0 голосов
/ 29 февраля 2020

Я пытаюсь протестировать сервис в моем приложении Angular, но я не понимаю, как я могу смоделировать переменную, объявленную вне моего метода.

Мой сервис выглядит так:

export class MyService {
    private token: string

    public myMethod(): Promise<boolean> {
        if(!this.token) // do Something
        else // do Something else
    }
}

Чего мне не хватает?

1 Ответ

0 голосов
/ 29 февраля 2020

Исходя из того, что сказал Андрей Гейтж, мы можем сделать токен получателем. Теперь внешние классы / контексты могут получить только token, но не могут писать в него. Это поможет нам насмехаться над ним в модульных тестах.

Примерно так:

export class MyService {
    // the _ indicates this is a private variable
    private _token: string;
    get token(): string {
      return this._token;
    }

    // whenever you set your token, do this._token = ....

    public myMethod(): Promise<boolean> {
        if(!this.token) // do Something
        else // do Something else
    }
}

Затем в вашем файле spe c, если вы уже настроили его

it('should do the if block', async(done) => {
  spyOnProperty(service, 'token', 'get').and.returnValue(null);
  await service.myMethod();
  await fixture.whenStable();
  // the rest of your assertions
});

it('should do the else block', async(done) => {
  spyOnProperty(service, 'token', 'get').and.returnValue('a token value');
  await service.myMethod();
  await fixture.whenStable();
  // the rest of your assertions
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...