html - 如何测试渲染了多少组件
问题描述
我尝试测试,如果一个组件的渲染时间与我在 Angular 中所期望的一样多。例如应用程序接收器
我正在测试一个具有以下 html 的组件:
<div class="wichtel-form-container">
<form class="wichteln-group-form" *ngIf="router.url == '/dostuff'"
#startWichtelForm="ngForm">
<div class="form-group-container">
<app-sender class=".sender" [sender]="sender"></app-sender>
<app-receiver *ngFor="let receiver of receivers; let i = index"
[receiver]="receivers[i]" [receiversAmount]="receivers.length"
[receiverIndex]="receivers.indexOf(receiver)"
(delete)="removeReceiver($event)"></app-receiver>
</div>
</form>
</div>
在测试时,我总是得到这个:
Expected [ ] to have size 3.
这是我的测试设置:
beforeEach(async () => {
TestBed.overrideProvider(Router, {useValue: {url: 'http://someurl.li'}});
await TestBed.configureTestingModule({
declarations: [WichtelnGroupComponent, SenderComponent,
ReceiverComponent, WichtelnDetailsComponent, ConfirmationComponent,
CheckConfirmationComponent],
providers: [
WichtelDataHandlerService
],
imports: [FormsModule]
});
});
以及失败的测试:
it('should create', () => {
TestBed.overrideProvider(Router, {useValue: {url:
'http://someurl.li/dostuff'}});
fixture = TestBed.createComponent(WichtelnGroupComponent);
createComponents();
expect(component).toBeTruthy();
expect(component.receivers).toHaveSize(3);
expect(document.getElementsByClassName('.sender')).not.toBeNull();
expect(document.getElementsByClassName('.wichteln-group-form .form-group-
container app-sender')).not.toBeNull();
const arr = Array.from(document.getElementsByClassName('.wichteln-group-form
' + '.form-group-container app-receiver'));
expect(arr).toHaveSize(3);
});
function createComponents(): void {
component = fixture.componentInstance;
fixture.detectChanges();
TestBed.compileComponents();
}
如果我使用结果是一样的
document.getElementsByClassName
或者
expect(fixture.debugElement.queryAll(By.css('.wichteln-group-form .form-group-
container app-sender'))).toHaveSize(3);
测试这个的正确方法是什么?
解决方案
queryAll
返回一个数组,并且您正在将数组与数字进行比较。
尝试这个:
// check out .length here and check for app-receiver
// If app-receiver works, it means your CSS selector is not accurate
expect(fixture.debugElement.queryAll(By.css('app-receiver')).length).toBe(3);
推荐阅读
- system - 如何构建翻译系统
- php - 验证 php 对象的字段是否为空值的更好方法
- python - Apache Airflow ImportError:无法导入名称'_psutil_linux'
- firebase - 如何在 Firestore 中获取每个用户或客户的帐单详细信息?
- java - netbeans 调试错误 - nbjpdastart 不支持嵌套的“modulepath”元素
- material-ui - material-ui-next 表格超出容器宽度且不可滚动
- python-3.x - 从导入的模块中设置/修改函数中使用的变量
- c - 最适合基于前缀的搜索的数据结构
- java - 无法加载驱动程序类:com.mysql.jdbc.Driver Spring Boot
- html - MaterializeCSS 行中的项目居中对齐