【发布时间】:2018-02-27 21:33:18
【问题描述】:
我目前正在使用angular material data-table cdk。为了将我的 ngrx/store 连接到数据表 CDK,我正在扩展 DataSource CDK 的连接方法,以允许注入 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], ?).
然后我继续为 value 和 key 提供值:
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ObservableDataSource ],
providers:[
{provide: 'value', useValue: []},
{provide: 'key', useValue: ''},
]
})
.compileComponents();
}));
但是,错误Failed: Can't resolve all parameters.. 仍然出现。关于我如何正确提供构造函数值的任何建议,以便 Jasmine/Karma 可以正确解析参数,我们不胜感激。谢谢你。
【问题讨论】:
-
你的
ObservableDataSource真的有用吗?我认为在单元测试之外尝试在应用程序中使用组件时,您也会遇到这些相同的错误。可以注入字符串或数组之类的值,但您需要使用@Inject函数来执行此操作。见here。 -
它确实有效。执行以下操作:
this.dataSource = new ObservableDataSource(this.value, 'visible');按预期工作。 -
我明白了。然后你必须在单元测试中做同样的事情。试图提供像你一样的值是行不通的。
-
好的。因此,出于好奇,我将如何在单元测试中做同样的事情?
-
您不必这样做。 Here 是用来了解我的意思的东西。例子是测试一个服务,但是思路还是一样的;你会在新建组件时包含你的参数。
标签: angular unit-testing jasmine karma-runner