【发布时间】:2016-08-27 17:49:16
【问题描述】:
我有一个 RESTful API,现在我正在开发一个使用数据服务调用 API 的 angular2 应用程序。然后我想使用量角器实现端到端测试。我想从非常低的级别开始,所以我进行了测试以检查单击链接时我的组件是否存在。测试如下:
describe('my-webclient', () => {
it('app should load', () => {
browser.get('/');
expect(element(by.css('my-app')).isPresent()).toBe(true);
});
it('app should have a top navigation', () => {
expect(element(by.css('my-nav-top')).isPresent()).toBe(true);
});
it('app should have a side navigation', () => {
expect(element(by.css('my-nav-side')).isPresent()).toBe(true);
});
it('app should have a content', () => {
expect(element(by.css('my-content')).isPresent()).toBe(true);
});
it('app should load the overview for route "/"', () => {
expect(element(by.css('my-overview')).isPresent()).toBe(true);
});
});
问题是,overview 组件使用一些数据服务在ngOnInit 函数中发出HTTP 请求。然后量角器将永远阻塞,尽管 HTTP 请求很久以前就完成了。
当我监控测试时,我可以看到应用的加载方式,包括从我的 API 获取的所有数据。然后什么也没有发生,量角器最终会崩溃,说已经达到超时。
确切的错误信息是:
Failed: Timed out waiting for Protractor to synchronize with the page after 11 seconds. Please see https://github.com/angular/protractor/blob/master/docs/faq.md
While waiting for element with locator - Locator: By(css selector, my-app)
在 google 上搜索帮助时,我遇到了一些提示,即量角器将等待 angular 完成所有操作。嗯,这正是我想要的。当我在 chrome 的开发人员工具 (F12) 中监视网络选项卡时,应用程序加载后不久就什么也没有出现。因此,没有更多待处理的请求或任何等待量角器的东西。不过,确实如此,我只是不知道为什么。
所以,这是我的问题:在处理发出 HTTP 请求的数据服务时,我是否需要考虑一些特别的事情?或者:我可以做些什么来调试为什么量角器仍在等待超时命中。
顺便说一句,它绝对是数据服务。如果我将OverviewComponent::ngOnInit 中的所有内容都注释掉,那么测试将按照我的预期顺利通过。
【问题讨论】:
标签: angular typescript protractor