我想单元测试组件的功能。 因此,我需要一个模拟服务(根据angular testing guide)。
这是我的TestBed:
TestBed.configureTestingModule({
declarations: [LanguageSelectorComponent],
providers: [
{ provide: LanguageSelectorService, useValue: userServiceStub }]
});
这是我的userServiceStub:
let userServiceStub: Partial<LanguageSelectorService>;
userServiceStub = {
_languages:
[
{
ID: '',
Name: '',
ImageSrc: ''
},
{
ID: '',
Name: '',
ImageSrc: ''
}
]
};
但起初“_language”是一个私人财产,所以在这里找不到。 第二,当我将其更改为public时,我仍然在userServiceStub上收到错误消息:
[TS] 输入'{_languages:{ID:string;名称:字符串; ImageSrc:string; } []; }'不能指定为'Partial'类型。 属性'_languages'的类型是不兼容的。 输入'{ID:string;名称:字符串; ImageSrc:string; } []'不能赋值为'Observable'。 类型'{ID:string;中缺少属性'_isScalar';名称:字符串; ImageSrc:string; } []”。 让userServiceStub:Partial
那么模拟服务价值的正确方法是什么?
谢
答案 0 :(得分:0)
服务代码:
2.2.0
&#13;
答案 1 :(得分:0)
你并没有很好地嘲笑_languages属性,因为它是 Observable ,而不是数组。你应该这样做:
let userServiceStub: Partial<LanguageSelectorService>;
userServiceStub = {
_languages: Observable.of( // or simply of() if you are using new rxjs piepeable version
[
{
ID: '',
Name: '',
ImageSrc: ''
},
{
ID: '',
Name: '',
ImageSrc: ''
}
]
)
};
这应该有用,不会给你任何错误。当然,为了获得数组值,你必须 .sbuscribe(),但它是同步的,所以你不必担心这一点。
希望这有帮助。