【发布时间】:2017-02-28 02:34:25
【问题描述】:
我有一个 React 组件,它模仿了大多数现代社交媒体网站所具有的“链接预览”功能。您输入一个链接,它会获取图像、标题等...
我通过让 React 组件向我的服务器进行 AJAX 回调来获取 URL 预览数据来做到这一点。
在获取时,我显示了一个中间“加载”状态(即一些加载图标或旋转轮)
相关的 React sn-p 看起来像
this.setState({ isLoadingAttachment: true })
return $.ajax({
type: "GET",
url: some_url,
dataType: "json",
contentType: "application/json",
}).success(function(response){
// Succesful! Do Success stuff
component.setState({ isLoadingAttachment: false })
}).error(function(response) {
// Uh oh! Handle failure stuff
component.setState({ isLoadingAttachment: false })
});
请注意isLoadingAttachment 状态变量如何仅在服务器进行提取时有效一秒钟。成功和错误场景都会立即禁用它。
我想在“加载”状态下使用 Capybara 功能规范测试一些功能。我已经模拟了所有的网络调用和服务器要返回的数据,但这一切都发生得如此之快,以至于它在我什至可以在其上运行任何expect().. 语句之前就通过了“加载”状态。我也故意不打电话给wait_for_ajax,这样页面就会继续前进而无需等待ajax,但它仍然太快了。
最后,我还尝试故意将服务器调用延迟 1.0 秒,但这也不起作用。我假设是因为整个事情都是单线程的?
# `foo` is an arbitrary method called during the server-side execution
allow_any_instance_of(MyController).
to receive(:foo) { sleep(1.0) }.and_call_original
有什么想法可以做到这一点吗?
谢谢!
【问题讨论】:
标签: ruby-on-rails ajax rspec capybara capybara-webkit