作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 TestBed 为 Angular 组件编写集成测试。使用 @inject(MAT_DIALOG_DATA)
将一些数据注入(inject)到 Material 对话框的组件中.我想测试两个案例。一种是没有提供数据,另一种是提供了一些数据。但是我想在所有情况下都以相同的方式配置测试模块(在 beforeEach
方法中)。
因此,对于没有注入(inject)数据的情况,我将模块配置如下:
TestBed.configureTestingModule({
declarations: [
PostNewComponent
].concat(EntryComponents1),
imports: [TestingModule],
providers: [
PostService,
{ provide: MAT_DIALOG_DATA, useValue: {} },
{ provide: MatDialogRef, useValue: { close: (dialogResult: any) => {}, updateSize: () => {} }}
]
});
然后我有一个案例,我想测试通过的测试数据。所以我尝试了以下方法来覆盖提供者。
TestBed.overrideProvider(MAT_DIALOG_DATA, {useValue : {name: "passedName"}});
但它不会覆盖提供者。我调试了这个问题,发现 overrideProvider 终于在 core.js 中调用了以下方法
/**
* Read the `ngInjectableDef` for `type` in a way which is immune to accidentally reading inherited
* value.
*
* @param type A type which may have its own (non-inherited) `ngInjectableDef`.
*/
function getInjectableDef(type) {
var def = type[NG_INJECTABLE_DEF];
// The definition read above may come from a base class. `hasOwnProperty` is not sufficient to
// distinguish this case, as in older browsers (e.g. IE10) static property inheritance is
// implemented by copying the properties.
//
// Instead, the ngInjectableDef's token is compared to the type, and if they don't match then the
// property was not defined directly on the type itself, and was likely inherited. The definition
// is only returned if the type matches the def.token.
return def && def.token === type ? def : null;
}
和“类型”参数在
MAT_DIALOG_DATA
的情况下传递给此函数不包含
ngInjectableDef
属性(property)。我对 Angular 没有深入的了解,所以有人可以解释为什么它不起作用以及这个只读属性“
ngInjectableDef
”到底是什么?
最佳答案
我遇到了类似的问题。不知道为什么它不起作用,但我能够针对我的情况使用一种解决方法。因为在组件的构造函数中我们有
@Inject(MAT_DIALOG_DATA) public data: any,
component.data.name = "passedName";
关于angular - 无法在 Angular Testing 用例中使用 TestBed.overrideProvider 覆盖 MAT_DIALOG_DATA 提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59543061/
我正在使用带有 Jest 的 Angular 7 并且正在模拟组件的提供者。很多时候我需要更改在 TestBed 之后注入(inject)到组件中的内容。已编译,并且使用此代码执行此操作没有任何问题:
我正在尝试使用 TestBed 为 Angular 组件编写集成测试。使用 @inject(MAT_DIALOG_DATA) 将一些数据注入(inject)到 Material 对话框的组件中.我想测
我是一名优秀的程序员,十分优秀!