У меня проблемы с проверкой логики внутри подписки ActivatedRoute queryParams.
constructor(private router: Router, private route: ActivatedRoute, private auth: AuthService) {}
ngOnInit(): void {
this.route.queryParams.subscribe((params:any) => {
if(params['data']) {
this.handle(params['data']);
} else {
if (this.auth.isAuthenticated()) {
this.router.navigate(['/home']);
}
}
});
}
Я хочу проверить:
- Если
this.handle()
запускается при издевании params['data']
предоставляется - Если нет параметров и
this.auth.isAuthenticated()
возвращает true
, что this.router.navigate
называется
Я перепробовал несколько вещей, и у меня заканчиваются идеи.
Мой тестовый файл:
describe('TestComponent', () => {
let component: TestComponent;
let fixture: ComponentFixture<TestComponent>;
const mockService = {
navigate: jasmine.createSpy('navigate'),
isAuthenticated: jasmine.createSpy('isAuthenticated'),
queryParams: jasmine.createSpy('queryParams')
};
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [TestComponent],
providers: [
{ provide: Router, useValue: mockService },
{ provide: ActivatedRoute, useValue: mockService },
{ provide: AuthService, useValue: mockService }
]
}).compileComponents();
fixture = TestBed.createComponent(TestComponent);
component = fixture.componentInstance;
mockService.navigate.calls.reset();
}));
it('should create the test component', () => {
expect(component).toBeTruthy();
});
it('should navigate away when authenticated', () => {
mockService.isAuthenticated.and.returnValue(true);
mockService.queryParams.and.callFake((data, params) => new Observable(o => o.next({ params: {} })));
component.ngOnInit();
expect(mockService.navigate).toHaveBeenCalledWith(['/home']);
});
});
Но с этим я получаю TypeError: this.route.queryParams.subscribe is not a function
.Я знаю, что mockService.isAuthenticated.and.returnValue(true);
работает правильно, потому что до использования подписки на параметры у меня было только это, если оператор внутри ngOnInit()
.
Я пытался изменить mockService на:
const mockService = {
navigate: jasmine.createSpy('navigate'),
isAuthenticated: jasmine.createSpy('isAuthenticated'),
queryParams: {
subscribe: jasmine.create('subscribe')
}
};
Я также попробовал:
const mockService = {
navigate: jasmine.createSpy('navigate'),
isAuthenticated: jasmine.createSpy('isAuthenticated'),
queryParams: {
subscribe: Observable.of({ params: {} })
}
};
Но безуспешно, за последние два я получаю Expected spy navigate to have been called with [ [ '/home' ] ] but it was never called.
Так кто-нибудь знает, как правильно проверить логику внутри подписки querParams?