正如@estus在评论中提到的那样,最好从路由器中获取哈希值。但是为了直接回答您的问题,您需要将window注入到使用它的位置,以便在测试期间可以模拟它。
首先,在angular2提供程序中注册window - 如果您在许多地方都使用它,则可能是全局的某个位置:
import { provide } from '@angular/core';
provide(Window, { useValue: window });
这段代码告诉 Angular 当依赖注入询问类型
Window
时,它应该返回全局
window
。现在,在你使用它的地方,你要将它注入到你的类中,而不是直接使用全局变量。
import { Component } from '@angular/core';
@Component({ ... })
export default class MyCoolComponent {
constructor (
window: Window
) {}
public myCoolFunction () {
let hash: string;
hash = this.window.location.hash;
}
}
现在你已经准备好在测试中模拟该值了。
import {
beforeEach,
beforeEachProviders,
describe,
expect,
it,
inject,
injectAsync
} from 'angular2/testing';
let myMockWindow: Window;
beforeEachProviders(() => [
myMockWindow = <any> { location: <any> { hash: 'WAOW-MOCK-HASH' }};
provide(Window, {useValue: myMockWindow})
]);
it('should do the things', () => {
let mockHash = myMockWindow.location.hash;
});