可能的Poltergeist内存泄漏 - 如何使用session.driver.quit?

时间:2016-05-02 12:35:41

标签: ruby-on-rails rspec poltergeist

我认为在运行Rspec / Capybara测试时我遇到了内存泄漏问题。至少,这个相当高规格的Macbook Pro(特别是Chrome)在运行测试时会慢慢陷入几乎无法抓取的状态。

Poltergeist提到这是possible issue(我正在运行JS测试)。

建议的修复方法是包含session.driver.quit,但是应该包含在哪里?默认情况下,session在哪里定义?

当我在测试后加入session.driver.quit时会导致错误。

3 个答案:

答案 0 :(得分:0)

在Capybara下,可以使用Capybara.current_session访问“会话”,在测试中也可以aliased as page。所以你可以尝试以下方法:

Capybara.current_session.driver.quit

但是我不确定戒烟会在测试结束后帮助你(请告诉我们它是否真的有用)。

答案 1 :(得分:0)

详细信息在您提供的链接中 - 仅在您手动管理会话(自己调用Session.new)时才真正适用,并且只是建议在完成会话时清理会话。如果您在Capybara管理会话时开始致电quit,那么您会遇到各种各样的问题。更好的选择是确保您运行最新版本的PhantomJS(截至今天为2.1.1),因为这很可能会造成任何泄漏。

答案 2 :(得分:0)

遇到同样的问题并在每个规范之后使用page.driver.restart重新启动PhantomJS。

我的PhantomJS内存使用率现在一直低于200mb(运行整个套件时用于达到> 5Gb)。

  config.after(:each) do |example|
    if defined?(page) # page is not defined on non-JS tests
      Capybara.reset_sessions!
      page.driver.restart
    end
    DatabaseCleaner.clean
  end