Angular + Karma-Jessie |如何模拟组件的私有属性?

时间:2018-04-03 17:01:59

标签: angular unit-testing karma-jasmine

我在一个组件上声明了这个属性:

@Input() private origin;

哪些具有这些属性

const origin = {
    'iban': string,
    'user': string,
    'description': string,
    'money': string
};

我想测试服务TransactionContextService以检查组件是否真实。

beforeEach(inject([TransactionContextService], (service: TransactionContextService) => {
    service.setOrigin(origin);
    service.setBenefactor(Usuals.getMockData()[0]);
    fixture = TestBed.createComponent(FormTransactionComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
}));

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

问题是:TypeError:无法读取未定义的属性'money'

我尝试使用spyOn使用 setOrigin 方法初始化输入“origin”。但这没效果。我想过使用服务TransactionContextService的模拟,但它是我要测试的服务... ^^

因此,似乎iban,用户和描述已初始化,但金钱属性不是。我应该模拟服务的setOrigin方法吗?如何初始化组件的私有属性?

1 个答案:

答案 0 :(得分:0)

您可以使用存根组件。 https://angular.io/guide/testing#nested-component-tests

这样您就可以使用所需的属性创建组件的存根。您需要手动创建money属性。

以下链接进一步说明了如何使用模拟组件创建设置夹具。