我正在尝试对使用第三方控件(来自 Clarity)的 Angular 4 组件进行单元测试。我已经使用正确的导入设置了测试模块,但 html 中的清晰元素只是作为元素保留 - 它们没有按预期解析并扩展为 html,即控件似乎没有经过正确的渲染周期。这是设置:
import { ClarityModule } from 'clarity-angular';
import { Alert } from '../../shared/components/alert.component';
import { AlertMessage, AlertStatus } from '../../shared/types/alert.message.type';
describe('Alert component tests->', () => {
let comp: Alert;
let fixture: ComponentFixture<Alert>;
let de: DebugElement;
let el: HTMLElement;
let deIcon: DebugElement;
let elIcon: HTMLElement;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [ClarityModule],
declarations: [Alert]
});
}));
当我检查夹具 debugElement 或 nativeElement 时,它没有被转换?当我尝试选择预期的元素时,它不存在。我是否缺少一些技巧来使控件呈现?
组件 html 模板看起来像这样并且保持这样:
<clr-alert [clrAlertType]="alertType" [clrAlertSizeSmall]="isSmall" [clrAlertAppLevel]="isAppLevel" [clrAlertClosable]="isCloseable">
<div class="alert-item">
<span class="alert-text">
{{message}}
</span>
</div>
</clr-alert>
编辑:经过一番拉扯后,我发现我需要调用 fixture.detectChanges() 来让测试台渲染组件。总之,在测试第三方组件时:
- 确保您已将包含该组件的模块导入到测试台中
- 如果您遇到错误,请不要只将 CUSTOM_ELEMENTS_SCHEMA 添加到测试平台模式,尝试找出它发生的原因并导入正确的模块(除非您进行浅层测试)
- 在尝试选择组件呈现的任何元素之前调用 fixture.detectChanges() (然后在设置属性后再次调用它,如角度文档站点上的大多数示例)。