title: How to write unit test for window.location.pathname with jasmine spy?
body: <p>I have angular 8 application and I am using the OidcSecurityService for identity server.</p>
  <p>And I am bussy to write some unit tests for it. But I am stuck on the following code part:</p>
  <pre><code> ngOnInit() {
      this.oidcSecurityService
        .checkAuth()
   
        .subscribe(isAuthenticated =&gt; {
          if (!isAuthenticated) {
            Eif ('/autologin' !== window.location.pathname) {
              this.write('redirect', window.location.pathname);
              this.router.navigate(['/autologin']);
            }
          }
          if (isAuthenticated) {
            this.navigateToStoredEndpoint();
          }
        });
      //console.log('windowPath',  window.location.pathname);
    }
  </code></pre>
  <p>and the complete ts file looks like this:</p>
  <pre><code>
  export class AppComponent implements OnInit {
    title = 'cityflows-client';
    constructor(public oidcSecurityService: OidcSecurityService, public router: Router) {}
  
    ngOnInit() {
      this.oidcSecurityService
        .checkAuth()
  
        .subscribe(isAuthenticated =&gt; {
          if (!isAuthenticated) {
            if ('/autologin' !== window.location.pathname) {
              this.write('redirect', window.location.pathname);
              this.router.navigate(['/autologin']);
            }
          }
          if (isAuthenticated) {
            this.navigateToStoredEndpoint();
          }
        });
      //console.log('windowPath',  window.location.pathname);
    }
  
  
    /**
     * Generate new set of access tokens for a http call
     */
    refreshSession() {
      this.oidcSecurityService.authorize();
    }
  
    /**
     * Redirect function for redirecting the user to the login page when application starts.
     */
    private navigateToStoredEndpoint() {
      const path = this.read('redirect');
  
      if (this.router.url === path) {
        return;
      }
      if (path.toString().includes('/unauthorized')) {
        this.router.navigate(['/']);
      } else {
        this.router.navigate([path]);
      }
    }
  
    /**
     *
     * @param key
     * For checking if user is authenticated for the URL
     * And if not will go back to root directory
     */
    private read(key: string): any {
      const data = localStorage.getItem(key);
      if (data != null) {
        return JSON.parse(data);
      }
      return;
    }
  
    /**
     *
     * @param key
     * @param value
     * for checking if url is the correct one
     */
    private write(key: string, value: any): void {
      localStorage.setItem(key, JSON.stringify(value));
    }
  }
  </code></pre>
  <p>and my unit test looks like this:</p>
  <pre><code>import { CommonModule } from '@angular/common';
  import { TestBed, async, ComponentFixture } from '@angular/core/testing';
  import { Router } from '@angular/router';
  import { RouterTestingModule } from '@angular/router/testing';
  import { OidcSecurityService } from 'angular-auth-oidc-client';
  import { of } from 'rxjs';
  import { AppComponent } from './app.component';
  import { OidcSecurityServiceStub } from './shared/mocks/oidcSecurityServiceStub';
  import { routes } from './app-routing.module';describe('AppComponent', () =&gt; {
  
  
    let component: AppComponent;
    let fixture: ComponentFixture&lt;AppComponent&gt;;
    let authenticatedService: OidcSecurityServiceStub;
    const routerSpy = { navigate: jasmine.createSpy('/autologin') };
    const routerNavigateSpy = { navigate: jasmine.createSpy('navigate') };
  
    let router: Router;
  
    beforeEach(async(() =&gt; {
      TestBed.configureTestingModule({
        imports: [RouterTestingModule],
        providers: [
          { provide: OidcSecurityService, useClass: OidcSecurityServiceStub },
          { provide: Router, useValue: routerSpy },
          { provide: Router, useValue: routerNavigateSpy }
        ],
  
        declarations: [AppComponent]
      }).compileComponents();
    }));
    beforeEach(() =&gt; {
      fixture = TestBed.createComponent(AppComponent);
      component = fixture.componentInstance;
      authenticatedService = new OidcSecurityServiceStub();
  
      fixture.detectChanges();
    });
  
    it('should create the app', () =&gt; {
      expect(component).toBeTruthy();
    });
  
    it('Navigate if not authenticated', () =&gt; {
      spyOn(component.oidcSecurityService, 'checkAuth').and.returnValue(of(false));
      component.ngOnInit();
      expect(routerSpy.navigate).not.toHaveBeenCalledWith(['/']);
      
    });
  
    it(' Should Navigate if not is root path ', () =&gt; {
      spyOn(component.oidcSecurityService, 'checkAuth').and.returnValue(of(false));   
      component.ngOnInit();
      expect(routerSpy.navigate).not.toHaveBeenCalledWith('/autologin');
     
    }); 
  });
  </code></pre>
  <p>But in the coverage rapport I see a E on this line:</p>
  <pre><code>   if ('/autologin' !== window.location.pathname) {
  </code></pre>
  <p>Else path not taken.</p>
  <p>So what I have to change?</p>
  <p>Thank you</p>
  <p>I just can do:</p>
  <pre><code>public href: string = '/';
  </code></pre>
  <p>and then:</p>
  <pre><code>  ngOnInit() {
      this.oidcSecurityService
        .checkAuth()
  
        .subscribe(isAuthenticated =&gt; {
          if (!isAuthenticated) {
            if ('/autologin' !== this.href) { 
              this.write('redirect', this.href);
              this.router.navigate(['/autologin']);
            }
          }
          if (isAuthenticated) {
            this.navigateToStoredEndpoint();
          }
        });
     
    }
  </code></pre>