Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 单元测试角度路由器事件导航结束_Angular - Fatal编程技术网

Angular 单元测试角度路由器事件导航结束

Angular 单元测试角度路由器事件导航结束,angular,Angular,我正在尝试单元测试我的app.component.ts,它侦听路由器事件并设置页面标题。我能够测试是否调用了getTitle函数,但我真的很想测试其余部分。(我需要100%的线路覆盖率)。也许你能帮忙 我的app.component.ts看起来像这样(只是相关部分): 我当前的app.component.spec.ts如下所示: describe('AppComponent', () => { let component: AppComponent; let fixture: Co

我正在尝试单元测试我的app.component.ts,它侦听路由器事件并设置页面标题。我能够测试是否调用了getTitle函数,但我真的很想测试其余部分。(我需要100%的线路覆盖率)。也许你能帮忙

我的app.component.ts看起来像这样(只是相关部分):

我当前的app.component.spec.ts如下所示:

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' } } } }
  }