Wir haben zusammengefasst, wie eine RSpec-Testumgebung in der Docker-Entwicklungsumgebung erstellt wird. Da ich Anfänger und Selbststudent bin, denke ich, dass es einige Fehler und bessere Möglichkeiten gibt, dies zu tun, aber ich wäre dankbar, wenn Sie zu diesem Zeitpunkt darauf hinweisen könnten.
Ich habe auf den folgenden Artikel verwiesen. Ich habe einen RSpec-Systemtest mit Selenium Docker on Rails on Docker versucht.
Zuvor habe ich einen Artikel über das Löschen von Browsertestfehlern in Rails-Entwicklung mit Docker kann keine Browsertests ausführen veröffentlicht. Wenn Sie einen Kommentar abgeben und Docker-Compose verwenden, um Chrome selbst als einen der Dienste auszuführen, Mir wurde geraten, dass es einfach zu testen sei, ohne die Rails-Umgebung zu verschmutzen, also habe ich es versucht. Vielen Dank für den Hinweis!
Das verwendete Image ist Standalone-Chrome, das von Anfang an in Chrome installiert ist.
docker-compose.yml
version: '3'
services:
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/[App Name]
ports:
- 3000:3000
depends_on:
- db
- chrome #← Hinzufügen
tty: true
stdin_open: true
db:
image: mysql:5.7
volumes:
- db-volume:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
#↓ Hinzufügen
chrome:
image: selenium/standalone-chrome:latest
ports:
- 4444:4444
#↑ Hinzufügen
volumes:
db-volume:
Fügen Sie Edelstein von rspec-Schienen hinzu
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' #hinzufügen
gem 'factory_bot_rails', '~>4.11'
end
Installieren Sie gem.
$ docker-compose build
RSpec-Installation
$ docker-compose run web rails g rspec:install
Beschreiben Sie als Nächstes die Einstellungen in "rails_helper.rb" in der durch die Installation erstellten Datei. Stellen Sie ein, dass beim Ausführen von RSpec der Browser des Docker-Selen-Containers verwendet wird.
/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
Bearbeiten Sie abschließend .rspec
, um die Einstellungen in rails_helper.rb zu lesen.
.rspec
- --require spec_helper
+ --require rails_helper
das ist alles.
Schreiben wir nun einen Test und sehen, ob wir den Test ausführen können.
#Wenn der Container startet
$ docker-compose exec web rspec [Pfad der rspec-Testdatei]
Ich konnte die Hardcopy des Browsers überprüfen, als der Test fehlschlug.
Recommended Posts