Angular 单元测试角度路由器事件导航结束
我正在尝试单元测试我的app.component.ts,它侦听路由器事件并设置页面标题。我能够测试是否调用了getTitle函数,但我真的很想测试其余部分。(我需要100%的线路覆盖率)。也许你能帮忙 我的app.component.ts看起来像这样(只是相关部分): 我当前的app.component.spec.ts如下所示:Angular 单元测试角度路由器事件导航结束,angular,Angular,我正在尝试单元测试我的app.component.ts,它侦听路由器事件并设置页面标题。我能够测试是否调用了getTitle函数,但我真的很想测试其余部分。(我需要100%的线路覆盖率)。也许你能帮忙 我的app.component.ts看起来像这样(只是相关部分): 我当前的app.component.spec.ts如下所示: describe('AppComponent', () => { let component: AppComponent; let fixture: Co
describe('AppComponent', () => {
let component: AppComponent;
let fixture: ComponentFixture<AppComponent>;
let methodSpy: jasmine.Spy;
let titleService: Title;
const eventSubject = new ReplaySubject<RouterEvent>(1);
const routerMock = {
navigate: jasmine.createSpy('navigate'),
events: eventSubject.asObservable(),
url: 'container'
}
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [AppComponent],
providers: [
AppComponent,
{ provide: Router, useValue: routerMock},
{ provide: Title}
],
schemas: [NO_ERRORS_SCHEMA]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(AppComponent);
component = fixture.componentInstance;
methodSpy = spyOn(component, 'getTitle');
fixture.detectChanges();
});
// this works
it('getTitle should have been called', () => {
eventSubject.next(new NavigationEnd(1, 'container', 'container'));
expect(methodSpy).toHaveBeenCalled;
});
// this gives me a "cannot read property root of undefined" error
it('page title should be "Container"', () => {
titleService = TestBed.get(Title);
expect(titleService.getTitle()).toBe("Container");
});
});
您能帮忙吗?您的存根应该包含更多道具:
const routerMock = {
navigate: jasmine.createSpy('navigate'),
events: eventSubject.asObservable(),
url: 'container',
routerState : { root: { snapshot: { data: { title: 'my stub value' } } } }
}
您的存根应该包含更多道具:
const routerMock = {
navigate: jasmine.createSpy('navigate'),
events: eventSubject.asObservable(),
url: 'container',
routerState : { root: { snapshot: { data: { title: 'my stub value' } } } }
}
这仍然会给ma一个“无法读取未定义的属性‘数据’”错误。@Manuela我以为你得到了它。。。没有关系。我已经用完整的存根更新了我的答案。非常感谢,这有点帮助,但现在我仍然收到一个错误“无法读取未定义的属性'join'。看起来我的getTitle函数没有返回任何内容。这可能是由一些异步问题引起的。我尝试了“fakeAsync”和“tick()”,但我认为我在这里遗漏了一些东西。@Manuela你应该模拟它。这仍然会给ma一个“无法读取未定义的属性‘数据’”错误。@Manuela我以为你得到了它。。。没有关系。我已经用完整的存根更新了我的答案。非常感谢,这有点帮助,但现在我仍然收到一个错误“无法读取未定义的属性'join'。看起来我的getTitle函数没有返回任何内容。这可能是由一些异步问题引起的。我试过“fakeAsync”和“tick()”,但我想我遗漏了一些东西。@Manuela你应该嘲笑它。
const routerMock = {
navigate: jasmine.createSpy('navigate'),
events: eventSubject.asObservable(),
url: 'container',
routerState : { root: { snapshot: { data: { title: 'my stub value' } } } }
}