Nous avons résumé comment créer un environnement de test RSpec dans l'environnement de développement docker. Puisque je suis un débutant et que je suis un auto-apprentissage, je pense qu'il y a des erreurs et de meilleures façons de le faire, mais je vous serais reconnaissant de bien vouloir le signaler à ce moment-là.
J'ai fait référence à l'article suivant. J'ai essayé le test du système RSpec avec Selenium Docker on Rails sur Docker.
Auparavant, j'avais publié un article sur la suppression des erreurs de test de navigateur dans Le développement de Rails à l'aide de Docker ne peut pas exécuter de tests de navigateur. Si vous commentez et utilisez docker-compose pour exécuter Chrome lui-même en tant que l'un des services, On m'a dit qu'il serait facile de tester sans polluer l'environnement Rails, alors je l'ai essayé. Merci de l'avoir signalé!
L'image utilisée est un chrome autonome, qui est celui avec Chrome installé depuis le début.
docker-compose.yml
version: '3'
services:
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/[nom de l'application]
ports:
- 3000:3000
depends_on:
- db
- chrome #← Ajouter
tty: true
stdin_open: true
db:
image: mysql:5.7
volumes:
- db-volume:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
#↓ Ajouter
chrome:
image: selenium/standalone-chrome:latest
ports:
- 4444:4444
#↑ Ajouter
volumes:
db-volume:
Ajouter un joyau de rspec-rails
Gemfile
group :development, :test do
# Call 'byebug' anywhere in the code to stop execution and get a debugger console
gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
gem 'rspec-rails', '~> 4.0.1' #ajouter à
gem 'factory_bot_rails', '~>4.11'
end
Installez gem.
$ docker-compose build
Installation de RSpec
$ docker-compose run web rails g rspec:install
Ensuite, décrivez les paramètres dans "rails_helper.rb" dans le fichier créé par l'installation. Configuré pour utiliser le navigateur du conteneur docker-sélénium lors de l'exécution de RSpec.
/spec/rails_helper.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|
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
Enfin, éditez .rspec
pour lire les paramètres dans rails_helper.rb.
.rspec
- --require spec_helper
+ --require rails_helper
c'est tout.
Maintenant, écrivons un test et voyons si nous pouvons exécuter le test.
#Quand le conteneur démarre
$ docker-compose exec web rspec [chemin du fichier de test rspec]
J'ai pu vérifier la copie papier du navigateur lorsque le test a échoué.