加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby – 在Capybara中模拟网络故障/离线模式?

发布时间:2020-12-17 02:06:37 所属栏目:百科 来源:网络整理
导读:我的应用程序中有一些 JavaScript可以检测网络连接何时消失,并暂时将数据缓存在本地存储中,以便在重新建立连接时与服务器同步. 我一直试图找到一种方法来使用Capybara测试这种端到端,但我似乎无法找到暂时禁用应用服务器或将无头浏览器切换到离线模式的任何
我的应用程序中有一些 JavaScript可以检测网络连接何时消失,并暂时将数据缓存在本地存储中,以便在重新建立连接时与服务器同步.

我一直试图找到一种方法来使用Capybara测试这种端到端,但我似乎无法找到暂时禁用应用服务器或将无头浏览器切换到离线模式的任何方法. FWIW我用Poltergeist作为驱动程序.

有没有人知道如何测试它? (我可以使用sinon测试JavaScript应用程序来伪造服务器消失,但我希望能够使用无头浏览器端到端测试它,如果可能的话).

解决方法

我的团队已经将Rack应用程序删除,以模拟来自服务器的错误.它运行良好(在Firefox中).以下是代码中的一些相关摘录:

class NoResponseRack
  attr_reader :requests

  def initialize disconnected_mode
    @disconnected_mode = disconnected_mode

    @requests = []
    @sleeping_threads = []
  end

  def call(env)
    @requests.push(env)

    case @disconnected_mode
    when :elb_pool_empty
      @sleeping_threads << Thread.current
      sleep 65
      @sleeping_threads.delete Thread.current
      [504,{},['']]
    when :server_maintenance
      [200,['status_message=Atlas is down for maintenance.']]
    else
      [999,[""]]
    end
  end

  def wakeup_sleeping_threads
    @sleeping_threads.each &:wakeup
    @sleeping_threads.clear
  end
end

def go_disconnected_with_proxy disconnected_mode=:server_error
  if $proxy_server_disconnected
    puts 'going DISconnected'
    $current_proxy = NoResponseRack.new disconnected_mode
    rack_mappings.unshift([nil,"",/^(.*)/n,$current_proxy])

    $proxy_server_disconnected = false
  end
end

def rack_app
  Capybara::current_session.driver.app
end

def rack_mappings
  rack_app.instance_variable_get(:@mapping)
end

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读