让水豚等待去抖动
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'
之前被调用
这确保挂钩的顺序设置正确。
希望这对其他人有帮助
使用 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'
这确保挂钩的顺序设置正确。
希望这对其他人有帮助