小编Muh*_*man的帖子

无法在角度测试用例中使用 TestBed.overrideProvider 覆盖 MAT_DIALOG_DATA 提供程序

我正在尝试使用 TestBed 为 Angular 组件编写集成测试。有一些数据被注入到材质对话框的组件中,使用@inject(MAT_DIALOG_DATA). 我想测试两个案例。一种是没有提供数据时,另一种是提供一些数据时。但我想为所有情况(在beforeEach方法中)以相同的方式配置测试模块。因此,对于没有注入数据的情况,我将模块配置如下:

    TestBed.configureTestingModule({
          declarations: [
            PostNewComponent
          ].concat(EntryComponents1),
          imports: [TestingModule],
          providers: [
            PostService,
            { provide: MAT_DIALOG_DATA, useValue: {} },
            { provide: MatDialogRef, useValue: { close: (dialogResult: any) => {}, updateSize: () => {} }}
          ]
        });

Run Code Online (Sandbox Code Playgroud)

然后我有一个案例,我想测试通过的测试数据。所以我尝试了以下方法来覆盖提供者。

    TestBed.overrideProvider(MAT_DIALOG_DATA, {useValue : {name: "passedName"}});
Run Code Online (Sandbox Code Playgroud)

但它不会覆盖提供者。我调试了这个问题,发现 overrideProvider 最终在 core.js 中调用以下方法

        /**
     * Read the `ngInjectableDef` for `type` in a way which is immune to accidentally reading inherited
     * value.
     *
     * @param type A type which …
Run Code Online (Sandbox Code Playgroud)

testbed karma-jasmine angular-material angular

5
推荐指数
1
解决办法
1629
查看次数