gpt4 book ai didi

angular - 监视 ChangeDetectorRef.detectChanges

转载 作者:行者123 更新时间:2023-12-03 16:05:19 27 4
gpt4 key购买 nike

我正在尝试测试一个组件调用 detectChanges上面注入(inject)了ChangeDetectorRef
我已经逐步完成了代码,它肯定被调用了,但似乎我在组件和测试中得到了不同的 ChangeDetectorRef 值。这是代码。我也试过注释掉的 spy ,但也没有用。

it('should call ChangeDetectorRef.detectChanges from onFixedUpdate', () => {
let changeDetectorService = fixture.debugElement.injector.get(ChangeDetectorRef, null);
let spy = spyOn(changeDetectorService, 'detectChanges').and.callThrough();
//let spy = spyOn(fixture.changeDetectorRef, 'detectChanges').and.callThrough();

expect(spy).not.toHaveBeenCalled();

fixture.componentInstance.onFixedUpdate(1);

expect(spy).toHaveBeenCalled();
});

最佳答案

首先一些考虑:

  • ChangeDetectorRef不是通过 DI 提供的,所以你不能提供 double 。
  • fixture.changeDetectorRef与提供的组件不同,因此您不能使用它。
  • fixture.debugElement.injector.get(ChangeDetectorRef)将创建私有(private)类的新实例 ViewRef (公共(public)类 ViewRef 只是 ViewRef$1 的别名),每次调用它时,提供给组件的对象都是另一个。

  • 所以我的解决方案是:
    // Get a reference to an instance of the private class
    const changeDetectorRef = fixture.debugElement.injector.get(ChangeDetectorRef);
    // spy on private class prototype
    const detectChangesSpy = spyOn(changeDetectorRef.constructor.prototype, 'detectChanges');

    关于angular - 监视 ChangeDetectorRef.detectChanges,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44341757/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com