Skip to content

Commit f177174

Browse files
kimihitonabeta
andauthored
spec/system をSelenium経由で実行する (#1804)
* chore: 不要なwebdrivers gemを削除 * feat(test): Seleniumを導入 * chore(test): systemテストを実行する際はrake assets:precompileを実行する * chore(test): precompile_assets.rbで例外を無視せず送出する * add networks * add docker-compose.test.yml * remove comment --------- Co-authored-by: Kosuke Tanabe <[email protected]>
1 parent 2a3500e commit f177174

File tree

4 files changed

+66
-6
lines changed

4 files changed

+66
-6
lines changed

docker-compose.test.yml

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
version: '3.8'
2+
3+
services:
4+
web:
5+
environment:
6+
- WEBPACKER_DEV_SERVER_HOST=webpacker
7+
8+
selenium:
9+
image: selenium/standalone-chrome:114.0
10+
networks:
11+
internal:
12+
expose:
13+
- 4444
14+
- 7900
15+
- 5900
16+
shm_size: 2gb

spec/rails_helper.rb

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,5 @@
6868
# config.filter_gems_from_backtrace("gem name")
6969
config.extend ControllerMacros, type: :controller
7070

71-
config.before(:each) do |example|
72-
if example.metadata[:type] == :system
73-
driven_by :selenium, using: :headless_chrome, screen_size: [1400, 1400]
74-
end
75-
end
76-
7771
config.include Pundit::Authorization, type: :view
7872
end

spec/support/capybara.rb

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
require 'capybara/rspec'
2+
require "selenium-webdriver"
3+
4+
Capybara.register_driver :remote_chrome do |app|
5+
url = ENV['SELENIUM_DRIVER_URL']
6+
7+
options = ::Selenium::WebDriver::Chrome::Options.new
8+
options.add_argument("--headless")
9+
options.add_argument("--no-sandbox")
10+
options.add_argument('--disable-dev-shm-usage')
11+
options.add_argument('--window-size=1400,1400')
12+
13+
Capybara::Selenium::Driver.new(app, browser: :remote, url: url, options: options)
14+
end
15+
16+
RSpec.configure do |config|
17+
config.before(:each, type: :system) do
18+
Capybara.server_host = IPSocket.getaddress(Socket.gethostname)
19+
Capybara.app_host = "http://#{Capybara.server_host}"
20+
driven_by :remote_chrome
21+
end
22+
end

spec/support/precompile_assets.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
RSpec.configure do |config|
2+
config.before(:suite) do
3+
examples = RSpec.world.filtered_examples.values.flatten
4+
has_no_system_tests = examples.none? { |example| example.metadata[:type] == :system }
5+
6+
if has_no_system_tests
7+
$stdout.puts "\n No system test selected. Skip assets compilation.\n"
8+
next
9+
end
10+
11+
$stdout.puts "\n Precompiling assets.\n"
12+
original_stdout = $stdout.clone
13+
14+
start = Time.current
15+
begin
16+
$stdout.reopen(File.new("/dev/null", "w"))
17+
18+
require "rake"
19+
Rails.application.load_tasks
20+
Rake::Task["assets:precompile"].invoke
21+
rescue => e
22+
raise e.exception
23+
ensure
24+
$stdout.reopen(original_stdout)
25+
$stdout.puts "Finished in #{(Time.current - start).round(2)} seconds"
26+
end
27+
end
28+
end

0 commit comments

Comments
 (0)