angular - 角路由器出口茉莉花测试
问题描述
我正在通过 Jasmine 规范测试网络应用导航,RouterTestingModule
但在使用嵌套时遇到了问题fixture.whenStable().then(() => {})
。
例如:我单击一个链接,然后单击另一个链接,然后单击另一个链接,每次 router-outlet 更改它显示的组件时。到目前为止,这是我想测试的唯一方法(没有 e2e 测试)是遵循以下模式:
(component setup)
...
it('test name', async(() => {
fixture.nativeElement.querySelector('.link').click();
fixture.whenStable().then(() => {
fixture.nativeElement.querySelector('.link2').click();
fixture.whenStable().then(() => {
fixture.nativeElement.querySelector('.link3').click();
fixture.whenStable().then(() => {
expect(fixture.nativeElement.querySelector('.element')).toBeTruthy();
});
});
});
});
但这是一种编写测试的疯狂方式。我想尝试一下fakeAsync
,tick()
但flush()
它没有帮助,因为组件没有出现(渲染)代替router-outlet
.
有没有办法在没有嵌套承诺结构的情况下完成我的测试?可以fakeAsync
帮助我的情况吗?
解决方案
it('test name', async () => { // use actual async function to be able to use await
fixture.nativeElement.querySelector('.link').click();
await fixture.whenStable();
fixture.nativeElement.querySelector('.link2').click();
await fixture.whenStable();
fixture.nativeElement.querySelector('.link3').click();
await fixture.whenStable()
expect(fixture.nativeElement.querySelector('.element')).toBeTruthy();
});
推荐阅读
- shell - Shell 变量值替换
- php - 使用 PHP 忽略 CSV 中的列
- git - git pull 后重命名服务器上的文件夹
- c# - Hangfire 后台作业抛出“内存不足,无法继续执行程序。”
- reactjs - React Hooks 常见问题解答:getderivedstatefromprops 的实现导致渲染状态不连贯
- c# - 是否可以传递或替换控件名称的一部分?
- swift - 定义多个类型别名
- google-cloud-dataflow - 通过 Google Cloud Pub/Sub 将数据重播到 Apache Beam 管道中,而不会使其他订阅者超载
- python - mtmproxy http 在脚本中获取请求
- mutation-testing - PITEST增量分析找不到本地hash文件