For testing purposes you might want to inject window.location object in your component.
You can achieve this with custom InjectionToken mechanism provided by Angular.
export const LOCATION_TOKEN = new InjectionToken<Location>('Window location object');
@NgModule({
  providers: [
    { provide: LOCATION_TOKEN, useValue: window.location }
  ]
})
export class SharedModule {}
//...
@Component({
})
export class AppComponent {
  constructor(
    @Inject(LOCATION_TOKEN) public location: Location
  ) {}
}
file:app.component.ts
import { Component, Inject } from '@angular/core';
import { LOCATION_TOKEN } from './app.module';
@Component({
  selector: 'my-app',
  template: `{{ location.href }}`
})
export class AppComponent {
  constructor(
    @Inject(LOCATION_TOKEN) public location: Location
  ) {}
  useIt() {
    this.location.assign('xxx');
  }
}
file:app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule, InjectionToken } from '@angular/core';
import { AppComponent } from './app.component';
export const LOCATION_TOKEN = new InjectionToken<Location>('Window location object');
@NgModule({
  imports: [BrowserModule],
  declarations: [AppComponent],
  providers: [
    { provide: LOCATION_TOKEN, useValue: window.location }
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}
翻译自:https://www.30secondsofcode.org/angular/s/window-location-injection