预期的间谍导航已使用 [ [ '/login' ] ] 调用,但从未调用过



我正在为以下代码块编写测试用例:

someFn() {
if (this.loginStatus === '1') {
this.router.navigate(['/login']);
} 
}

在我的规范文件中:

import { Router } from '@angular/router'
describe('MyComponent', () => {
let routerStub;
beforeEach(async(() => { 
routerStub = {
navigate: jasmine.createSpy('navigate'),
};
TestBed.configureTestingModule({
declarations: [MyComponent],
providers: [       
{ provide: Router, useValue: routerStub },
],
}).compileComponents()
});
beforeEach(() => {
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
fixture.autoDetectChanges();
});
it('navigate to login', () => {
component.loginStatus = '1';
component.someFn();
expect(routerStub.navigate).toHaveBeenCalledWith(['/login']);
});
})

以上给出了错误:应使用[['/login']]调用间谍导航,但从未调用过

我该如何解决此问题?我尝试了很多SO的解决方案,但似乎对我无效。

代码是用Angular 7编写的,我使用的是jasmine+karma。

尝试以下方式:

import { Router } from '@angular/router'
describe('MyComponent', () => {
let router: Router;
beforeEach(async(() => { 
TestBed.configureTestingModule({
declarations: [MyComponent],
providers: [       
{ provide: Router, useValue: routerStub },
],
}).compileComponents()
});
beforeEach(() => {
fixture = TestBed.createComponent(MyComponent);
component = fixture.componentInstance;
router = TestBed.get(Router);
fixture.detectChanges();
});
it('navigate to login', () => {
const spy = spyOn(router, 'navigate');
component.loginStatus = '1';
component.someFn();
expect(router.navigate).toHaveBeenCalledWith(['/login']);
});
})

使用routerStub的另一种方法:-

import { Router } from '@angular/router';
 
class RouterStub {
public navigate(params: any[]): void {}
}
 
        describe('MyComponent', () => {
         let router: Router;
         beforeEach(async(() => { 
           TestBed.configureTestingModule({
             declarations: [MyComponent],
             providers: [       
                { provide: Router, useClass: RouterStub },
              ],
           }).compileComponents()
         });
        
         beforeEach(() => {
            fixture = TestBed.createComponent(MyComponent);
            component = fixture.componentInstance;
            router = TestBed.get(Router);
            fixture.detectChanges();
          });
        
          it('navigate to login', () => {
          const spy = spyOn(router, 'navigate');
             component.loginStatus = '1';
             component.someFn();
             expect(router.navigate).toHaveBeenCalledWith(['/login']);
          });
        })

相关内容

最新更新