Module: ApiMaker::SpecHelper
- Defined in:
- lib/api_maker/spec_helper.rb
Instance Method Summary collapse
- #chrome_logs ⇒ Object
- #expect_no_chrome_errors ⇒ Object
- #expect_no_chrome_window_errors ⇒ Object
- #expect_no_errors ⇒ Object
- #js_fill_in(element_id, with:) ⇒ Object
- #pretty_html ⇒ Object
- #reset_indexeddb ⇒ Object
- #wait_for_chrome(delay_sec: 0.5, timeout_sec: 6) ⇒ Object
- #wait_for_flash_message(expected_message, delay_sec: 0.5, timeout_sec: 10) ⇒ Object
- #wait_for_selector(selector) ⇒ Object
- #wait_for_selectors(*selectors) ⇒ Object
Instance Method Details
#chrome_logs ⇒ Object
2 3 4 |
# File 'lib/api_maker/spec_helper.rb', line 2 def chrome_logs page.driver.browser.manage.logs.get(:browser) end |
#expect_no_chrome_errors ⇒ Object
24 25 26 27 28 29 30 31 32 33 |
# File 'lib/api_maker/spec_helper.rb', line 24 def expect_no_chrome_errors logs = chrome_logs.map(&:to_s) logs = logs.reject { |log| log.include?("Warning: Can't perform a React state update on an unmounted component.") } return if !logs || !logs.join("\n").include?("SEVERE ") expect_no_chrome_window_errors puts logs.join("\n") expect(logs).to eq nil end |
#expect_no_chrome_window_errors ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
# File 'lib/api_maker/spec_helper.rb', line 6 def expect_no_chrome_window_errors sleep 1 errors = execute_script("if (window.errorLogger) { return window.errorLogger.getErrors() }") return if !errors.is_a?(Array) || errors.empty? last_error = errors.last custom_trace = [] custom_trace += last_error.fetch("backtrace") if last_error["backtrace"].is_a?(Array) custom_trace += caller error = RuntimeError.new("#{last_error["errorClass"]}: #{last_error["message"]}") error.set_backtrace(custom_trace) raise error end |
#expect_no_errors ⇒ Object
35 36 37 38 |
# File 'lib/api_maker/spec_helper.rb', line 35 def expect_no_errors expect_no_flash_errors expect_no_chrome_errors end |
#js_fill_in(element_id, with:) ⇒ Object
40 41 42 |
# File 'lib/api_maker/spec_helper.rb', line 40 def js_fill_in(element_id, with:) page.execute_script("document.querySelector(#{element_id.to_json}).value = #{with.to_json}") end |
#pretty_html ⇒ Object
44 45 46 47 |
# File 'lib/api_maker/spec_helper.rb', line 44 def pretty_html require "htmlbeautifier" HtmlBeautifier.beautify(page.html) end |
#reset_indexeddb ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/api_maker/spec_helper.rb', line 49 def reset_indexeddb execute_script " indexedDB.databases().then(function(databases) { var promises = [] for(var database of databases) { promises.push(indexedDB.deleteDatabase(database.name)) } Promise.all(promises).then(function() { console.error('All databases was deleted') }) }) " wait_for_condition do logs_text = chrome_logs.map(&:message).join("\n") logs_text.include?("\"All databases was deleted\"") end end |
#wait_for_chrome(delay_sec: 0.5, timeout_sec: 6) ⇒ Object
69 70 71 72 73 74 |
# File 'lib/api_maker/spec_helper.rb', line 69 def wait_for_chrome(delay_sec: 0.5, timeout_sec: 6) WaitUtil.wait_for_condition("wait for chrome", timeout_sec: timeout_sec, delay_sec: delay_sec) do expect_no_chrome_errors yield end end |
#wait_for_flash_message(expected_message, delay_sec: 0.5, timeout_sec: 10) ⇒ Object
76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/api_maker/spec_helper.rb', line 76 def (, delay_sec: 0.5, timeout_sec: 10) = [] begin WaitUtil.wait_for_condition("wait for flash message", timeout_sec: timeout_sec, delay_sec: delay_sec) do expect_no_chrome_errors = << == end rescue WaitUtil::TimeoutError expect(.uniq.reject(&:blank?)).to eq include end end |
#wait_for_selector(selector) ⇒ Object
91 92 93 |
# File 'lib/api_maker/spec_helper.rb', line 91 def wait_for_selector(selector) wait_for_chrome { page.has_selector?(selector) } end |
#wait_for_selectors(*selectors) ⇒ Object
95 96 97 98 99 |
# File 'lib/api_maker/spec_helper.rb', line 95 def wait_for_selectors(*selectors) selectors.each do |selector| wait_for_selector(selector) end end |