2017-03-08 114 views
0

我正在从头开始编写Rails集成套件。该项目使用自定义Websocket客户端(和本机ES6承诺对象)进行一些异步行为。等待原生ES6承诺在Rails集成测试中解决?

有没有办法告诉Rails应用程序还有未解决的承诺,并且在继续进行下一步测试之前需要等待而无需修改Javascript源代码?这里的大部分内容都集中在等待AJAX​​请求完成。这对于应用程序的某些部分很有用,但Websocket命令独立于AJAX。

回答

1

您需要设置一个断言/期望值,以确定解析时所产生的任何可见变化(就像您应该为AJAX请求所做的那样)。因此,如果将文本添加到页面

assert_text('New text that is added') # non-RSpec 
expect(page).to have_text('New text that is added') # if using RSpec 

,或者如果它增加了一个新的元素添加到页面

assert_selector(:css, '#id_of_new_element') # non-RSpec 
expect(page).to have_css('#id_of_new_element') # RSpec 

等水豚提供断言/预期将等待/重试高达Capybara.default_max_wait_time为他们的条件将得到满足,所以如果你告诉它期望在页面中创建的承诺发生任何变化,它就会等待承诺解决。