|
36 | 36 | Dir[Rails.root.join("spec/support/**/*.rb")].each { |f| require f }
|
37 | 37 |
|
38 | 38 | RSpec.configure do |config|
|
| 39 | + config.include FactoryGirl::Syntax::Methods |
| 40 | + |
39 | 41 | # Next line will ensure that assets are built if webpack -w is not running
|
40 | 42 | ReactOnRails::TestHelper.configure_rspec_to_compile_assets(config)
|
41 | 43 |
|
|
44 | 46 |
|
45 | 47 | # Using errors_ok as there is a timing issue causing crashes without this setting
|
46 | 48 | # https://github.com/teampoltergeist/poltergeist/issues/830
|
47 |
| - default_driver = :poltergeist_errors_ok |
| 49 | + |
| 50 | + default_driver = :poltergeist_no_animations |
48 | 51 |
|
49 | 52 | supported_drivers = %i( poltergeist poltergeist_errors_ok
|
50 | 53 | poltergeist_no_animations webkit
|
51 | 54 | selenium_chrome selenium_firefox selenium)
|
52 | 55 | driver = ENV["DRIVER"].try(:to_sym) || default_driver
|
| 56 | + Capybara.default_driver = driver |
53 | 57 |
|
54 | 58 | unless supported_drivers.include?(driver)
|
55 | 59 | raise "Unsupported driver: #{driver} (supported = #{supported_drivers})"
|
|
59 | 63 | when :poltergeist, :poltergeist_errors_ok, :poltergeist_no_animations
|
60 | 64 | basic_opts = {
|
61 | 65 | window_size: [1300, 1800],
|
| 66 | + screen_size: [1400, 1900], |
62 | 67 | phantomjs_options: ["--load-images=no", "--ignore-ssl-errors=true"],
|
63 | 68 | timeout: 180
|
64 | 69 | }
|
|
78 | 83 | Capybara.register_driver :poltergeist_errors_ok do |app|
|
79 | 84 | Capybara::Poltergeist::Driver.new(app, no_animation_opts.merge(js_errors: false))
|
80 | 85 | end
|
| 86 | + Capybara::Screenshot.register_driver(:poltergeist) do |js_driver, path| |
| 87 | + js_driver.browser.save_screenshot(path) |
| 88 | + end |
| 89 | + Capybara::Screenshot.register_driver(:poltergeist_no_animations) do |js_driver, path| |
| 90 | + js_driver.render(path, full: true) |
| 91 | + end |
| 92 | + Capybara::Screenshot.register_driver(:poltergeist_errors_ok) do |js_driver, path| |
| 93 | + js_driver.render(path, full: true) |
| 94 | + end |
| 95 | + |
81 | 96 | when :selenium_chrome
|
82 | 97 | DriverRegistration.register_selenium_chrome
|
83 | 98 | when :selenium_firefox, :selenium
|
|
86 | 101 | end
|
87 | 102 |
|
88 | 103 | Capybara.javascript_driver = driver
|
| 104 | + Capybara.default_driver = driver |
89 | 105 |
|
90 | 106 | Capybara.register_server(Capybara.javascript_driver) do |app, port|
|
91 | 107 | require "rack/handler/puma"
|
|
98 | 114 | Capybara.save_path = Rails.root.join("tmp", "capybara")
|
99 | 115 | Capybara::Screenshot.prune_strategy = { keep: 10 }
|
100 | 116 |
|
101 |
| - # Remove this line if you're not using ActiveRecord or ActiveRecord fixtures |
102 |
| - # config.fixture_path = "#{::Rails.root}/spec/fixtures" |
| 117 | + config.use_transactional_fixtures = false |
103 | 118 |
|
104 |
| - # If you're not using ActiveRecord, or you'd prefer not to run each of your |
105 |
| - # examples within a transaction, remove the following line or assign false |
106 |
| - # instead of true. |
107 |
| - config.use_transactional_fixtures = true |
| 119 | + config.before(:suite) do |
| 120 | + if config.use_transactional_fixtures? |
| 121 | + raise(<<-MSG) |
| 122 | + Delete line `config.use_transactional_fixtures = true` from rails_helper.rb |
| 123 | + (or set it to false) to prevent uncommitted transactions being used in |
| 124 | + JavaScript-dependent specs. |
| 125 | +
|
| 126 | + During testing, the app-under-test that the browser driver connects to |
| 127 | + uses a different database connection to the database connection used by |
| 128 | + the spec. The app's database connection would not be able to access |
| 129 | + uncommitted transaction data setup over the spec's database connection. |
| 130 | + MSG |
| 131 | + end |
| 132 | + DatabaseCleaner.clean_with(:truncation) |
| 133 | + end |
| 134 | + |
| 135 | + config.before(:each) do |
| 136 | + DatabaseCleaner.strategy = :transaction |
| 137 | + end |
| 138 | + |
| 139 | + config.before(:each, type: :feature) do |
| 140 | + # :rack_test driver's Rack app under test shares database connection |
| 141 | + # with the specs, so continue to use transaction strategy for speed. |
| 142 | + driver_shares_db_connection_with_specs = Capybara.current_driver == :rack_test |
| 143 | + |
| 144 | + unless driver_shares_db_connection_with_specs |
| 145 | + # Driver is probably for an external browser with an app |
| 146 | + # under test that does *not* share a database connection with the |
| 147 | + # specs, so use truncation strategy. |
| 148 | + DatabaseCleaner.strategy = :truncation |
| 149 | + end |
| 150 | + end |
| 151 | + |
| 152 | + config.before(:each) do |
| 153 | + DatabaseCleaner.start |
| 154 | + end |
| 155 | + |
| 156 | + config.append_after(:each) do |
| 157 | + DatabaseCleaner.clean |
| 158 | + Capybara.reset_sessions! |
| 159 | + end |
108 | 160 |
|
109 | 161 | # RSpec Rails can automatically mix in different behaviours to your tests
|
110 | 162 | # based on their file location, for example enabling you to call `get` and
|
|
126 | 178 | # development server if it is running.
|
127 | 179 | Capybara.asset_host = "http://localhost:3000"
|
128 | 180 |
|
129 |
| - # config taken directly from RSpec example in the DatabaseCleaner README |
130 |
| - config.before(:suite) do |
131 |
| - DatabaseCleaner.strategy = :transaction |
132 |
| - DatabaseCleaner.clean_with :truncation |
133 |
| - end |
134 |
| - |
135 |
| - config.around(:each) do |example| |
136 |
| - DatabaseCleaner.cleaning do |
137 |
| - example.run |
138 |
| - end |
139 |
| - end |
140 |
| - |
141 |
| - config.after(:each) do |
142 |
| - # Experimental to fix failing poltergeist tests |
143 |
| - # page.driver.restart if defined?(page.driver.restart) |
144 |
| - Capybara.reset_sessions! |
145 |
| - end |
146 |
| - |
147 |
| - config.append_after(:each) do |
148 |
| - DatabaseCleaner.clean |
149 |
| - end |
150 |
| - |
151 | 181 | def js_errors_driver
|
152 | 182 | Capybara.javascript_driver == :poltergeist ? :poltergeist_errors_ok : Capybara.javascript_driver
|
153 | 183 | end
|
|
0 commit comments