我对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上找到关于此的任何文档。
答案 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
数组中使用useClass
或providers
的虚假实现。