bundle exec rails generate rspec:install
bin/rails g factory_bot:model mandalart
bin/rails g rspec:system mandalart
bin/rails g rspec:model mandalart
いままでこれらのコマンドを入力してきました。
spec/rails_helper.rb
+ require 'capybara/rspec'
spec/rails_helper.rb
require 'capybara/rspec'
spec/support/capybara.rb
equire 'selenium-webdriver'
require 'capybara/rspec'
Capybara.configure do |config|
config.default_driver = :chrome
config.javascript_driver = :chrome
config.run_server = true
config.default_selector = :css
config.default_max_wait_time = 5
config.ignore_hidden_elements = true
config.save_path = Dir.pwd
config.automatic_label_click = false
end
Capybara.register_driver :chrome do |app|
options = Selenium::WebDriver::Chrome::Options.new
options.add_argument('disable-notifications')
options.add_argument('disable-translate')
options.add_argument('disable-extensions')
options.add_argument('disable-infobars')
options.add_argument('window-size=1280,960')
# ブラウザーを起動する
Capybara::Selenium::Driver.new(
app,
browser: :chrome,
options: options
)
end
spec/rails_helper
# This file is copied to spec/ when you run 'rails generate rspec:install'
# Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
RSpec.configure do |config|
config.before(:each, type: :system) do
driven_by :rack_test
end
config.before(:each, type: :system, js: true) do
driven_by :selenium_chrome_headless
end
end
require 'spec_helper'
ENV['RAILS_ENV'] ||= 'test'
require File.expand_path('../config/environment', __dir__)
# Prevent database truncation if the environment is production
abort('The Rails environment is running in production mode!') if Rails.env.production?
require 'rspec/rails'
# Add additional requires below this line. Rails is not loaded until this point!
# Requires supporting ruby files with custom matchers and macros, etc, in
# spec/support/ and its subdirectories. Files matching `spec/**/*_spec.rb` are
# run as spec files by default. This means that files in spec/support that end
# in _spec.rb will both be required and run as specs, causing the specs to be
# run twice. It is recommended that you do not name files matching this glob to
# end with _spec.rb. You can configure this pattern with the --pattern
# option on the command line or in ~/.rspec, .rspec or `.rspec-local`.
#
# The following line is provided for convenience purposes. It has the downside
# of increasing the boot-up time by auto-requiring all files in the support
# directory. Alternatively, in the individual `*_spec.rb` files, manually
# require only the support files necessary.
#
# Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f }
# Checks for pending migrations and applies them before tests are run.
# If you are not using ActiveRecord, you can remove these lines.
begin
ActiveRecord::Migration.maintain_test_schema!
rescue ActiveRecord::PendingMigrationError => e
puts e.to_s.strip
exit 1
end
RSpec.configure do |config|
# Remove this line if you're not using ActiveRecord or ActiveRecord fixtures
config.fixture_path = "#{::Rails.root}/spec/fixtures"
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false
# instead of true.
config.use_transactional_fixtures = true
# You can uncomment this line to turn off ActiveRecord support entirely.
# config.use_active_record = false
# RSpec Rails can automatically mix in different behaviours to your tests
# based on their file location, for example enabling you to call `get` and
# `post` in specs under `spec/controllers`.
#
# You can disable this behaviour by removing the line below, and instead
# explicitly tag your specs with their type, e.g.:
#
# RSpec.describe UsersController, type: :controller do
# # ...
# end
#
# The different available types are documented in the features, such as in
# https://relishapp.com/rspec/rspec-rails/docs
config.infer_spec_type_from_file_location!
# Filter lines from Rails gems in backtraces.
config.filter_rails_from_backtrace!
# arbitrary gems may also be filtered via:
# config.filter_gems_from_backtrace("gem name")
end
docker-compose.yml
version: '3'
services:
db:
image: mysql:8.0.21
cap_add:
- SYS_NICE
# コンテナにLinux機能を追加するオプションのようです。SYS_NICEは、プロセスの優先度(nice値)をあげます。
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_HOST: db
ports:
- '3306:3306'
volumes:
- mysql-data:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password # 認証方式を8系以前のものにする
web: &web
build: .
command: ./bin/rails s -b 0
stdin_open: true
tty: true
# この2文を追加でコンテナ内の標準入出力をローカルマシンのターミナルにアタッチする準備が整います。
volumes:
- .:/ideaFrameworks
ports:
- "3000:3000"
depends_on:
- db
- selenium_chrome
environment:
WEBPACKER_DEV_SERVER_HOST: webpacker
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
RAILS_MASTER_KEY: ${RAILS_MASTER_KEY}
MYSQL_HOST: db
# selenium_chrome を使うために以下の行を追加
SELENIUM_DRIVER_URL: http://selenium_chrome:4444/wd/hub"
selenium_chrome:
image: selenium/standalone-chrome-debug
logging:
driver: none
ports:
- 4444:4444
webpacker:
<<: *web
command: ./bin/webpack-dev-server
environment:
WEBPACKER_DEV_SERVER_HOST: 0.0.0.0
ports:
- "3035:3035"
volumes:
mysql-data:
driver: local
vendor_bundle:
driver: local
FROM ruby:2.6.5
## nodejsとyarnはwebpackをインストールする際に必要
# yarnパッケージ管理ツールをインストール
RUN curl http://deb.debian.org/debian/dists/buster/main/binary-amd64/by-hash/SHA256/935deda18d5bdc25fb1813d0ec99b6e0e32a084b203e518af0cf7dc79ee8ebda | head
RUN apt-get update && apt-get install -y curl apt-transport-https wget && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
apt-get update && apt-get install -y yarn && apt-get install -y graphviz
# chromeの追加
RUN apt-get update && apt-get install -y unzip && \
CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE` && \
wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ && \
unzip ~/chromedriver_linux64.zip -d ~/ && \
rm ~/chromedriver_linux64.zip && \
chown root:root ~/chromedriver && \
chmod 755 ~/chromedriver && \
mv ~/chromedriver /usr/bin/chromedriver && \
sh -c 'wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -' && \
sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' && \
apt-get update && apt-get install -y google-chrome-stable
RUN /bin/sh -c /bin/sh -c bundle update --bundler
RUN gem install bundler:2.1.4
RUN mkdir /ideaFrameworks
WORKDIR /ideaFrameworks
COPY Gemfile /ideaFrameworks/Gemfile
COPY Gemfile.lock /ideaFrameworks/Gemfile.lock
RUN bundle install
RUN bundle update rails
RUN bundle update
RUN bundle update capybara selenium-webdriver
#RUN bundle update nokogiri marcel mimemagic
RUN bundle install
COPY . /ideaFrameworks
RUN yarn install --check-files
RUN bundle install
RUN bundle exec rails webpacker:compile
# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]
僕の、Dockerfileとdocker-compose.ymlの設定では動きました。