Angular: Unit Testing - Невозможно протестировать троичную ветвь для покрытия кода - PullRequest
0 голосов
/ 06 июля 2019

Я пытаюсь проверить троичную ветвь, которая использует window.location.

@Injectable()
export class ABCService {
  private hostUrl = (window.location.host.indexOf('localhost') > -1) ? 'example.com' : window.location.host;
...

TestCase:

it('check alternate URL', () => {
        const URL = 'http://example.org/postMethod';
        service.getData().subscribe(data => {
            expect(data.length).toBe(1);
        });
        const req = httpMock.expectOne(URL);
        expect(req.request.url).toBe(URL);
        req.flush({data:[1]});
    });

Ошибка получения:

   Error: Expected one matching request for criteria "Match URL: http://example.org/postMethod", found none.

Любые идеи о том, как я могу проверить, если window.location.host не является localhost.Пробовал (window as any).location = { ...window.location, host: 'http://example.org' }; все еще получать хост == localhost:9876; ИЛИ Есть ли способ, которым я могу переопределить window.location.host значение макета?

Ответы [ 2 ]

3 голосов
/ 06 июля 2019

Вместо ссылки на глобальную переменную, которая может не быть определена в зависимости от среды, в которой вы запускаете свое приложение (например, Angular Universal), используйте внедрение зависимостей.

В этом случае вы можете получить необходимую информацию из константы ДОКУМЕНТА Angular (https://angular.io/api/common/DOCUMENT).

constructor(@Inject(DOCUMENT) private doc) {
  console.log(this.doc.location.href);
}

И в своих тестах вы могли бы высмеять это:

const service = new ABCService({location: {href: 'my-test-url'}} as any);
0 голосов
/ 06 июля 2019

Мне нужен весь код для более точного понимания вашего вопроса и контрольного примера. Можете ли вы предоставить Stackblitz url для него?

В любом случае, вы можете использовать функцию spyOn Жасмина для насмешки window.location. Таким образом, вы можете указывать макет его функций и их возвращаемые значения без фактической установки хоста.

Посмотрите на Жасмин документы для получения дополнительной информации.

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