我目前正在使用angular material data-table cdk。为了将我的ngrx / store连接到数据表CDK,我正在扩展DataSource CDK的connect方法,以允许注入一个observable。以下是此问题的相关代码
export class ObservableDataSource extends DataSource<any> {
private value: any[];
private key: string;
constructor(value: any[], key) {
super();
this.value = value;
this.key = key;
}
connect() {
return combineLatest(this.value, (data) => {
return data[this.key];
});
}
disconnect() {}
}
当单元测试这个组件时(对于好奇的人有一个@Component
装饰器,只是没有显示),我收到以下错误:
Failed: Can't resolve all parameters for ObservableDataSource: ([object Object], ?).
然后我继续为值和键提供值:
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ObservableDataSource ],
providers:[
{provide: 'value', useValue: []},
{provide: 'key', useValue: ''},
]
})
.compileComponents();
}));
但是,错误Failed: Can't resolve all parameters..
仍会显示。关于如何正确提供构造函数值的任何建议,以便Jasmine / Karma可以正确地解析参数是非常值得赞赏的。谢谢。
答案 0 :(得分:2)
在进一步研究之后,我做了以下工作以使其正常工作。首先,我意识到这是一项服务,而不是一个组件。所以我切换了@Component()
装扮@Injectable
。
其次,我为服务提供了构造服务的值,如下所示:
providers: [
{provide: ObservableDataSource, useValue: new ObservableDataSource([], 'visible')}
]
这解决了上述问题,并允许我继续使用TestBed。