我的应用程序中有一些JavaScript可以检测网络连接何时消失,并暂时将数据缓存在本地存储中,以便在重新建立连接时与服务器同步。
我一直试图找到一种方法来使用Capybara进行端到端的测试,但我似乎无法找到暂时禁用应用服务器或将无头浏览器切换为离线模式。 FWIW我使用Poltergeist作为驱动程序。
有没有人知道如何测试它? (我可以使用sinon测试JavaScript应用程序来假装服务器消失,但我希望能够使用无头浏览器端到端地测试它。)
答案 0 :(得分:1)
我的团队已将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
答案 1 :(得分:0)
关于我能想到的唯一方法是允许在测试中覆盖主机,并给它一个虚假的主机(类似localhost:31337)。
也许看看http://robots.thoughtbot.com/using-capybara-to-test-javascript-that-makes-http,看看有没有跳出来。
答案 2 :(得分:0)
如果您偶然发现了这个问题,寻找一种使用Capybara和Chrome Headless测试离线/渐进式Web应用程序的方法,请按以下步骤操作:
params = {
cmd: 'Network.emulateNetworkConditions',
params: {
offline: true,
latency: 0,
downloadThroughput: 0,
uploadThroughput: 0
}
}
page.driver.browser.send(:bridge).send_command(params)