代码之家  ›  专栏  ›  技术社区  ›  ohadinho

因果报应测试失败,因为“expressionchangedafterithasbeencheckederror”

  •  0
  • ohadinho  · 技术社区  · 6 年前

    我有一个web应用程序 ExpressionChangedAfterItHasBeenCheckedError 各页出错。这更像是一个警告而不是一个错误,web应用程序运行良好。

    目前,还没有修复代码以消除这个错误的选项,我需要karma测试来忽略它。

    当我运行业力测试时,我得到:

    Failed: ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked.
    

    有什么方法可以忽略这个特定的错误吗?

    1 回复  |  直到 6 年前
        1
  •  0
  •   Scrimothy    6 年前

    我也有同样的问题。通常,即使我在运行应用程序的控制台中得到了这个错误,它仍然不会使karma/jasmine测试失败(在这种情况下,我实际上并没有在apponly in karma中得到控制台错误)。

    我不确定这是不是你的问题,但我的问题与我的使用方式有关。 ngStyle . 不确定 为什么? 这解决了问题,但我想我会把它添加到这里,让其他人寻找答案。

    误差

    当我这样做的时候,我得到了错误:

    模板

    <div [ngStyle]="{ 'width.px': (!checked ? widthValue : 0) }">Blah</div>
    

    这个 widthValue 正在计算中 AfterViewInit .

    我也尝试过这种格式(这也给了我错误):

    <div [ngStyle]="{ 'width': (!checked ? widthValue : 0) + 'px' }">Blah</div>
    

    解决方案

    当我将逻辑切换到组件并在生成的样式对象中传递时,效果很好。

    模板

    <div [ngStyle]="labelWidth(checked)">Blah</div>
    

    成分

    labelWidth(checked: boolean): SafeStyle {
      return {
        width: `${(checked ? this.maxLabelWidth : 0)}px`,
      };
    }