首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >rxjs‘`delay`’使量角器E2E超时

rxjs‘`delay`’使量角器E2E超时
EN

Stack Overflow用户
提问于 2018-05-16 12:36:20
回答 3查看 1.2K关注 0票数 0

当我ng e2e我的应用程序时,我收到以下错误:

失败:超时等待异步角任务在11秒后完成。

下面是app.component.ts。请注意它是如何在订阅15秒后发布“app”的。

我意识到量角器等待,直到在您的角应用程序中没有挂起的异步任务。。请继续阅读。

代码语言:javascript
复制
import { Component } from '@angular/core';
import * as Rxjs from 'rxjs';
import * as Operators from 'rxjs/operators';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  title: Rxjs.Observable<string>;

  constructor() {
    this.title = Rxjs.of('app').pipe(
      Operators.delay(15000)
    );
  }
}

以下是app.component.html中相应的更改

代码语言:javascript
复制
Welcome to {{ title | async }}!

其他一切都是骨储备(这是我在ng new之后所做的唯一改变)。

当然,这是一个愚蠢的例子。我的现实生活代码做了一些有用的事情。我需要有可观察的,在很长一段时间内不发布任何东西的(在我的例子中是几个月)。

有没有办法在我的应用程序中使用rxjs的delay操作符,这样我的端到端测试就不会超时?

或者有什么我可以做的,向量角器发出信号,它不需要等待一个特定的可观测的?

我尝试过的事情:

browser.waitForAngularEnabled(false)

这确实会导致量角器停止等待,但这不是一个好的解决方案,因为这是一个角度应用程序,它使一切变得更加困难。

ngZone.runOutsideAngular(() => {...})

这于事无补,因为长时间运行的操作是通过视图绑定( {{ title | async }})进行的。那不是我可以给ngZone.runOutsideAngular打电话的地方。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-16 13:09:00

量角器试图与角同步,例如,从$http调用中考虑AUT足够稳定以进行测试。

您可以在测试开始时使用browser.ignoreSynchronisation = true (无论是在confg.js文件中还是在describe块中)来阻止Protractor这样做。

票数 2
EN

Stack Overflow用户

发布于 2019-11-30 16:17:52

对于这个问题,我使用的是rxjs 6,它的角度为8,但可能会遇到同样的问题。

对我来说,从延迟切换到计时器很有帮助,例如:

代码语言:javascript
复制
of(true).pipe(delay(1000)); 

遇到量角器超时,但如果我将其更改为

代码语言:javascript
复制
of(true).pipe(switchMap(() => timer(1000))

它是工作的,不知道为什么,但我不需要告诉量角器,他不应该等待角的一个简单的理由,他应该这么做,因为我运行多个http请求。如果我们不关心被正确传递的值,它也会做同样的事情。

代码语言:javascript
复制
browser.waitForAngularEnabled(false)

那就不需要了。好吧,这更像是一项工作,我更喜欢使用延迟,而不是为这种行为重写所有的e2e测试。

票数 0
EN

Stack Overflow用户

发布于 2020-05-31 17:54:41

我的rxjs计时器也有类似的问题,我的量角器测试总是抛出"ScriptTimeoutError: script timeout“异常。对我有用的解决方案是,我在带有计时器的页面上使用了本机。例如:

而不是:

代码语言:javascript
复制
await element(by.id('question-12' )).click();

我使用了selenium:

代码语言:javascript
复制
import {By} from "selenium-webdriver";
//...
await browser.driver.findElement(By.id('question-12' )).click();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50371152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档