Ceci est mon premier message, alors jetez un œil à toute erreur ou chose déroutante.
・ Rubis 2.7.1 ・ Rails 6.0.2.1
・ Exécutez le test du système en utilisant le docker de sélnium dans CircleCI -Make system js: true disponible dans CircleCI
docker-compose.yml Obtenez l'image du sélénium à utiliser dans les spécifications du système, et n'oubliez pas de spécifier le port et la coopération avec depens_on.
docker-compose.yml
version: "3"
services:
web:
build: .
volumes:
- .:/myapp
ports:
- "3000:3000"
tty: true
stdin_open: true
depends_on:
- db
- chrome
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABE: db
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
command: --default-authentication-plugin=mysql_native_password
chrome:
image: selenium/standalone-chrome-debug:latest
ports:
- "4444:4444"
volumes:
mysql-data:
driver: local
En l'état, le conteneur db ne sera pas utilisé pour la base de données, donc modifiez database.yml.
database.yml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password
host: db
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
database: myappp_production
username: myapp
password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>
$ docker-compose build
$ docker-compose up
$ docker-compose run web rake db:create
spec/rails_helper Ajoutez les gemmes nécessaires aux tests
Gemfile
group :test do
gem 'capybara'
gem 'selenium-webdriver'
gem 'rspec-rails'
end
le test du système modifie rails_spec pour utiliser le docker sélénium
rails_spec.rb
Capybara.register_driver :remote_chrome do |app|
url = 'http://chrome:4444/wd/hub'
caps = ::Selenium::WebDriver::Remote::Capabilities.chrome(
'goog:chromeOptions' => {
'args' => [
'no-sandbox',
'headless',
'disable-gpu',
'window-size=1680,1050'
]
}
)
Capybara::Selenium::Driver.new(app, browser: :remote, url: url, desired_capabilities: caps)
end
RSpec.configure do |config|
#réduction
config.before(:each, type: :system) do
driven_by :rack_test
end
config.before(:each, type: :system, js: true) do
driven_by :remote_chrome
Capybara.server_host = IPSocket.getaddress(Socket.gethostname)
Capybara.server_port = 4444
Capybara.app_host = "http://#{Capybara.server_host}:#{Capybara.server_port}"
end
end
Les spécifications du système local devraient maintenant fonctionner correctement
.circleci/config.yml Paramètres Circle CI --run: mv ./config/database.yml.ci ./config/database.yml modifie les paramètres de la base de données dans l'environnement CI. Vous devez définir le nom: chrome ʻErrno :: EADDRINUSE: Adresse déjà utilisée --bind (2) pour le port 4444 "172.27.0.3" Une erreur se produit
config.yml
version: 2.1
jobs:
build:
docker:
- image: circleci/ruby:2.7.1-node-browsers
RAILS_ENV: test
DB_HOST: 127.0.0.1
- image: mysql:8.0
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "true"
MYSQL_ROOT_HOST: "127.0.0.1"
MYSQL_DATABE: db
command: --default-authentication-plugin=mysql_native_password
- image: selenium/standalone-chrome-debug:latest
name: chrome
working_directory: ~/coffee
steps:
- checkout
- run:
name:Installer le bundle
command: bundle check || bundle install --jobs=4
- run:
name:Ajouter du fil
command: yarn install
- run:
name:Ajouter un pack Web
command: bundle exec bin/webpack
- run:
name: rubocop
command: bundle exec rubocop
- run: mv ./config/database.yml.ci ./config/database.yml
- run:
name:Créer une base de données
command: bundle exec rails db:create || bundle exec rails db:migrate
- run:
name: rspec test
command: |
mkdir /tmp/test-results
TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | \
circleci tests split --split-by=timings)"
bundle exec rspec \
--format RspecJunitFormatter \
--out /tmp/test-results/rspec.xml \
--format progress \
$TEST_FILES
- store_test_results:
path: /tmp/test-results
- store_artifacts:
path: /tmp/test-results
destination: test-results
Le test du système rspec sur CircleCI devrait maintenant fonctionner correctement