让水豚等待去抖动

Getting Capybara to wait for debounce

使用 Rspec 和 Capybara 最近为我的大部分页面添加去抖后,测试现在随机失败。

现在在本地这些都很好,但在 Semaphore 2.0 上,我在较短的测试中随机失败。

我们使用 WebMock 来存根 remoteFetch() 中的请求,似乎在较短的测试中已将其删除。因为这是之后调用的,所以存根不存在并且测试失败

function debouncedFetch(ids) {
  store.idsToFetch.push(ids);
  $timeout.cancel(store.fetchTimeoutFn);
  store.fetchTimeoutFn = $timeout(() => { remoteFetch(store.idsToFetch); }, 200);
}

我试过将 debounce/timeout 设置为 0 仍然没有任何乐趣。

有没有办法检查 tests/rootscope 是否已完成或销毁之类的,而不是 运行 remoteFetch 函数。

或获取测试等待此功能运行

假设您正在使用默认的 Capybara 配置,其中 Capybara 管理被测应用程序的 运行 连接,它将等待所有网络连接在 after 中的测试重置期间关闭堵塞。由于您正在 after 块中清理 WebMock,因此它可能发生在 Capybara 注册块之前。要解决这个问题,您可以更改它们定义的顺序或使用 append_after 而不是 after 定义 WebMock 清理,因此可以保证在 Capybara 会话重置后 运行。

原来 after(each:) { WebMock.reset! } 作为 gem 的一部分在 Capybara.reset_sessions!

之前被调用

这会导致代码中出现竞争条件。解决此问题的方法是更改​​顺序并确保在 spec_helper 中 require 'webmock/rspec'require 'rspec/rails'

之前被调用

这确保挂钩的顺序设置正确。

希望这对其他人有帮助