Жасмин + карма тест бегун: как проверить window.location.href - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть служба, которая экпсулирует использование объекта window:

@Injectable()
export class WindowService {
    constructor(){};
    get window() : Window {
        return window;
    }
    get href(): string {
        return window.location.href;
    }
    set href(url: string) {
        window.location.href = url;
    }
}

Затем у меня есть следующий тест Жасмин:

describe('WindowService Test Suite', () => {
    let windowService: WindowService;

    beforeEach(() => { 
        windowService = new WindowService();
    });

    it('should set the href', () => {
        windowService.href = "/test";
        expect(windowService.href).toBe("/test");
    });
});

Проблема в том, что когда яустановить href, перенаправление кармы на этот URL и привести к тому, что другие тесты не будут запущены.

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

Ответы [ 3 ]

0 голосов
/ 12 сентября 2018

Окно это объект, как и любой другой. вы должны быть в состоянии смоделировать это в своих тестах, например:

window.location = jasmine.createSpyObj('location', ['href']);

Если нет, вы все равно можете переписать его с помощью

Object.defineProperty(window.location, 'href', { writable: true, value: 'foo bar' });
0 голосов
/ 14 сентября 2018

Единственный способ проверить это - иметь возможность установить window в WindowService через constructor или через setter для фальсификации объекта.Вы не можете шпионить или изменять window.location ...

0 голосов
/ 12 сентября 2018

Вы можете сделать простой трюк:

it('should set the href', () => {
    var currentUrl = windowService.href;
    windowService.href = "#test";
    expect(windowService.href).toBe(currentUrl + "#test");
});

значение # test не будет перенаправлять вашу страницу, но будет искать в DIV с id = test, чтобы перейти к ней.

...