在角度组件单元测试时为组件提供/注入第三方服务



我刚刚开始进行角度单元测试,LoginComponent依赖于第三方模块(保险丝(的服务FuseConfigService

这是FuseConfigService的样子

@Injectable({
providedIn: 'root'
})
export class FuseConfigService
{
private _configSubject: BehaviorSubject<any>;
private readonly _defaultConfig: any;
/**
* Constructor
*
* @param {Platform} _platform
* @param {Router} _router
* @param _config
*/
constructor(
private _platform: Platform,
private _router: Router,
@Inject(FUSE_CONFIG) private _config
)
{

这是LoginComponentconstructor的样子

constructor(
private fuseConfig: FuseConfigService,
private formBuilder: FormBuilder,
private router: Router,
private authenticationService: AuthService,
private route: ActivatedRoute,
private snackBar: MatSnackBar,
private fuseNavigationService: FuseNavigationService,
private pbiService: PbiService,
private translateService: TranslateService
) {
this.incorrectCredentials = false;
this.loginFormErrors = {
email: {},
password: {},
};
}

我不知道如何使用TestBed配置测试模块,因为它会抛出错误,例如

Error: StaticInjectorError(DynamicTestModule)[FuseConfigService -> InjectionToken fuseCustomConfig]: 
StaticInjectorError(Platform: core)[FuseConfigService -> InjectionToken fuseCustomConfig]: 
NullInjectorError: No provider for InjectionToken fuseCustomConfig!

这就是我正在尝试的

TestBed.configureTestingModule({
declarations: [LoginComponent],
imports: [FormsModule, ReactiveFormsModule, MatFormFieldModule,
MatInputModule,
MatCheckboxModule,
MatSnackBarModule,
MatButtonModule,
MatRadioModule],
providers: [
FuseConfigService,
{ provide: Router, useClass: class { navigate = jasmine.createSpy("navigate"); } },
FuseNavigationService
]
});

任何帮助将不胜感激。

问题是你使用的是原始的 FuseService。
并且 FuseService 具有依赖项。这意味着您还必须提供它们。以及它们的依赖关系。还有他们的。等等。

因此,嘲笑这项服务将是一个很好的做法。

对于"提供:根"的服务,可以这样完成:

TestBed.overrideProvider(OriginalService, {useValue: new MockService()});

只需在配置测试平台之前添加它即可。

"模拟服务"需要您在组件中使用的所有公共方法/变量。

相关内容

  • 没有找到相关文章

最新更新