I am trying to test routing in an Angular application. I can successfully test forward navigation but I cannot test back navigation.
My test specification:
import {Location} from "@angular/common";
import {TestBed, fakeAsync, tick} from '@angular/core/testing';
import {RouterTestingModule} from "@angular/router/testing";
import {Router} from "@angular/router";
import {
HomeComponent,
SearchComponent,
AppComponent,
routes
} from "./router"
describe('Router: App', () => {
let location: Location;
let router: Router;
let fixture;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [ RouterTestingModule.withRoutes(routes)],
declarations: [
HomeComponent,
SearchComponent,
AppComponent
]
});
router = TestBed.get(Router);
location = TestBed.get(Location);
fixture = TestBed.createComponent(AppComponent);
});
it('location.back()', fakeAsync(() => {
router.navigate(['']);
tick();
expect(router.routerState.snapshot.url).toBe('/home');
router.navigate(['/search']);
tick();
expect(router.routerState.snapshot.url).toBe('/search');
console.log('BACK')
location.back()
tick();
expect(location.path()).toBe('/home');
expect(router.routerState.snapshot.url).toBe('/home');
}));
});
When using router.navigate(), routerState is updated (I also checked that router.events sends navigation events). However, when calling location.back() the router state is not updated and I receive no router events through router.events.
What is the preferred way to test code, which uses back (and forward) navigation in Angular?
Thanks in advance.