Javascript 茉莉花测试超时,并带有“;在5000ms内未调用异步回调";虽然在我的角度项目测试中没有使用异步函数

Javascript 茉莉花测试超时,并带有“;在5000ms内未调用异步回调";虽然在我的角度项目测试中没有使用异步函数,javascript,angular,unit-testing,testing,jasmine,Javascript,Angular,Unit Testing,Testing,Jasmine,以下是源代码: import { async, ComponentFixture, TestBed } from '@angular/core/testing'; import { IonicModule } from '@ionic/angular'; import { HomePage } from './home.page'; import { LevelGridComponent } from '../level/level-grid/level-grid.component'; im

以下是源代码:

import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { IonicModule } from '@ionic/angular';

import { HomePage } from './home.page';
import { LevelGridComponent } from '../level/level-grid/level-grid.component';
import { SidebarComponent } from '../sidebar/sidebar.component';
import { LevelStatusSidebarComponent } from '../level/level-status-sidebar/level-status-sidebar.component';

describe('HomePage', () => {
  let component: HomePage;
  let fixture: ComponentFixture<HomePage>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [
        HomePage,
        LevelGridComponent,
        SidebarComponent,
        LevelStatusSidebarComponent
      ],
      imports: [IonicModule.forRoot()]
    }).compileComponents();

    fixture = TestBed.createComponent(HomePage);
    component = fixture.componentInstance;
    fixture.detectChanges();
  }));

  it('should create', () => {
    expect(component).toBeTruthy();
  });
});
这仍然不能解决在测试内部定义组件的第一个问题,因为错误仍然发生,所以我仍然需要定义它们。
我仍然没有得到技术细节,为什么组件依赖链中的一个随机未解析的可观测值会导致组件在测试中不知何故“超时”。(即使它只是被检查为“truthy”,即存在)

如果您正在对您的主页进行单元测试,您不应该将子组件添加到您的声明中。相反,您可以只创建该组件的存根版本。您可以在spec文件的底部放置类似下面的内容,并将StubLeveltatusSidebarComponent添加到您的声明中(您可能还需要删除输入)

@组成部分({ 选择器:“应用程序级状态边栏”, 模板:“” })

类StubLevelStatusSidebarComponent{}

或者,您可以尝试将以下内容添加到configureTestingModule对象中,它应该忽略缺少的子项错误并继续进行测试

架构:[无错误\u架构]


我也有同样的问题。从“beforeach”函数中删除“async”(或“waitForAsync”)。您在此处不使用任何“等待”:

public timeLeft = 5;
// […]

private startTimer() {
    const counter$ = interval(1000);

    const takeFourNumbers = counter$.pipe(
      take(this.timeLeft),
      takeUntil(this.ngUnsubscribe)
    );
    takeFourNumbers.subscribe(x => {
      this.timeLeft--;
      if (this.timeLeft === 0) {
        this.levelTimeout.emit();
      }
    });
  }
beforeEach(() => {
  TestBed.configureTestingModule({
    declarations: [
      HomePage,
      LevelGridComponent,
      SidebarComponent,
      LevelStatusSidebarComponent
    ],
    imports: [IonicModule.forRoot()]
  }).compileComponents();

  fixture = TestBed.createComponent(HomePage);
  component = fixture.componentInstance;
  fixture.detectChanges();
});