当 expect(result).toBe(null) 测试失败时测试冻结。 (Angular2、茉莉花)

Test freezes when expect(result).toBe(null) fails test. (Angular 2, Jasmine)

我有一个测试,检查部分 DOM 元素是否已被 ngIf 删除。当我使用 fixture.debugElement.query(By.css(".button-area")) 检查 DOM 时,resultnull 或 DOM 元素。

如果 resultnull,那么下面的测试工作正常。但是,如果测试 result 包含一个元素,它不仅会导致测试失败,还会 冻结 浏览器。

测试看起来像这样:

var result = fixture.debugElement.query(By.css(".button-area"))
expect(result).toBe(null)

我也试过expect(result).toEqual(null).toBeFalsy(),结果一样。

测试 DOM 元素是否已被正确删除的正确方法是什么?

更新 2017 年 1 月 23 日

我发现此问题特定于返回的元素:

fixture.debugElement.query(By.css(".button-area"))

这可能是 bug angular 2 或 jasmine。如果我使用 document.getElementByClassName("button-area") 这不是问题并且测试工作正常。

由于这似乎是 Jasmine 或 Angular 的错误,如果您遇到困难,这里有一个快速解决方法:

var result = fixture.debugElement.query(By.css(".button-area"))
expect(result === null).toBeTruthy()

问题解决后,您应该会在自己的代码中修复此问题。