使用uirouter angular 2 +

时间:2018-02-11 17:05:07

标签: angular angular-ui-router

我对ng2 +比较新,但我还没有找到任何关于如何在使用uirouter时运行单元/集成测试的示例。我有一个基本的健全测试,看起来像这样:

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

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [
        LoginComponent,
        LoginSignupComponent,
        CreateUserComponent,
        ValidationComponent,
        WidgetLoadingComponent
      ],
      imports: [
        ReactiveFormsModule,
        InputMaskModule,
        HttpClientTestingModule,
        NgbModule.forRoot(),
        UIRouterModule.forRoot({})
      ],
      providers: [
        LoginService,
        LoginStateService,
        StateService,
        {provide: APP_BASE_HREF, useValue : '/' },
      ]
    })
    .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(LoginSignupComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(component).toBeTruthy();
  });
});

但它失败了以下内容: Error: Can't resolve all parameters for StateService: (?).

StateService来自uirouter。我该如何解决?我无法在uirouter上找到关于此的任何文档。

2 个答案:

答案 0 :(得分:1)

我发现在导入部分引用 UI Router 模块就足够了:

 await TestBed.configureTestingModule({
  declarations: [ HomeComponent ],
  imports: [
    UIRouterModule.forRoot({}), 
    HttpClientModule,
    ModalModule.forRoot()
  ],
  providers: [
    {provide: 'environment', useValue: environment},
  ]
})

答案 1 :(得分:0)

此错误消息表示StateService的构造函数中有一个参数在当前TestBed中不存在。打开StateService的实现,检查其构造函数并向TestBed提供缺少的依赖项。如果需要模拟该依赖项,或者它对测试不重要,请在useValue数组中使用useClassproviders的虚假实现。