我正在尝试测试一个按钮,当单击它时,它会导航到我的主页,但当我为Router类提供一个Jasmine Spy对象时,我得到一个"TypeError: Cannot read property 'root‘of undefined“。
describe('Error404Component', () =>
{
let component: Error404Component;
let fixture: ComponentFixture<Error404Component>;
const routerSpy = jasmine.createSpyObj('Router', ['navigate']);
beforeEach(async(() =>
{
TestBed.configureTestingModule({
imports: [
AppModule
]
})
.compileComponents();
}));
beforeEach(() =>
{
TestBed.overrideProvider(Router, { useValue: routerSpy });
fixture = TestBed.createComponent(Error404Component);
component = fixture.componentInstance;
fixture.autoDetectChanges();
});
fit('should navigate', fakeAsync(() =>
{
const buttons = fixture.debugElement.queryAll(By.css('.button_link'));
expect(buttons).toBeTruthy();
const homeButton = buttons[0];
(homeButton.nativeElement as HTMLButtonElement).click();
fixture.detectChanges();
tick();
const spy = routerSpy.navigate as jasmine.Spy;
expect(spy.calls.any()).toBeTruthy();
expect(spy.calls.first().args[0][0]).toEqual(HOME_PATH);
}));
});
发布于 2019-06-19 15:30:08
当configureTestingModule
使用TestBed时,您应该提供在component中使用的router
和所有其他服务注入。
describe('Error404Component', () =>
{
class MockRouter {
navigate = jasmine.createSpy('navigate');
}
let component: Error404Component;
let fixture: ComponentFixture<Error404Component>;
let routerSpy;
beforeEach(async(() =>
{
routerSpy= new MockRouter();
TestBed.configureTestingModule({
imports: [
AppModule
],
providers: [{ provide: Router, useValue: routerSpy }],
schemas: [NO_ERRORS_SCHEMA]
})
.compileComponents();
}));
beforeEach(() =>
{
fixture = TestBed.createComponent(Error404Component);
component = fixture.componentInstance;
fixture.autoDetectChanges();
});
fit('should navigate', fakeAsync(() =>
{
const buttons = fixture.debugElement.queryAll(By.css('.button_link'));
expect(buttons).toBeTruthy();
const homeButton = buttons[0];
(homeButton.nativeElement as HTMLButtonElement).click();
fixture.detectChanges();
tick();
const spy = routerSpy.navigate as jasmine.Spy;
expect(spy.calls.any()).toBeTruthy();
expect(spy.calls.first().args[0][0]).toEqual(HOME_PATH);
}));
});
https://stackoverflow.com/questions/56671101
复制