【Playwright使用】Rails7.1 + Docker Compose環境にRSpecを導入する
今回はRails7.1
から標準でサポートされるようになったPlaywright
をシステムテストの実行環境として、Docker Compose
で動かしているRails
プロジェクトにRSpec
を導入していきます。
こちらの記事で解説した、Rails7.1
, Docker Compose
の環境構築が完了している前提で進めていきます。
必要なgem, packageを追加
gemファイルに以下3つを追加します。
RSpec
を実行するためのrspec-rails
に加えて、画面を操作する命令を提供するcapybara
、capybara
のドライバーとしてcapybara-playwright-driver
を追加しています。
group :development, :test do
gem "rspec-rails"
end
group :test do
gem "capybara"
gem "capybara-playwright-driver"
end
bundle installしておきます。
$ docker compose run --rm web bundle install
続いて@playwright/test
をインストールします。
docker compose run --rm web yarn add -D @playwright/test
コンテナ上でplaywrightをインストール
Dockerfile.devに以下を追記します。
コンテナ上でplaywirght
に関する依存関係のインストール・palywright
のインストールを行なっています。
# 省略
# Install node modules
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile
# ----- ↓追加↓ -----
# Install playwright dependencies
RUN yarn playwright install-deps && \
yarn playwright install
# ----- ↑追加↑ -----
# 省略
依存関係のインストールを行わないと以下のような警告が出ます。
追記後、ビルドします。
$ docker compose build
これでplaywright
のインストールは完了です。
RSpecの設定
RSpec
をインストールします。
$ docker compose run --rm web rails g rspec:install
自動生成された.rspec
にフォーマット設定を追加します。
--format documentation
この後追加するsupport
フォルダ内の設定ファイルを読み込めるようにrails_helper.rb
のコメントアウトを外します。
Rails.root.glob('spec/support/**/*.rb').sort.each { |f| require f }
specフォルダ配下にsupportフォルダ追加後、以下の内容でcapybara.rbファイルを作成します。
RSpec.configure do |config|
config.before(:each, type: :system) do
driven_by(:playwright)
end
end
これでシステムテスト実行時のcapybara
のドライバーをplaywright
にする設定が完了です。
RSpecの実行
試しにscaffold
で生成されたCRUD機能に対してシステムテストを作成してみます。
Task
モデルを作成します。
$ docker compose run --rm web rails g scaffold Task title:string content:text
specフォルダ配下にsystemフォルダを追加後、以下の内容でtasks_spec.rbファイルを作成します。
require "rails_helper"
RSpec.describe "Tasks", type: :system do
it "taksを作成できる" do
visit tasks_path
click_on "New task"
fill_in "Title", with: "タイトル"
fill_in "Content", with: "内容"
expect do
click_on "Create Task"
expect(page).to have_content "Task was successfully created."
end.to change(Task, :count).by(1)
end
end
RSpec
を実行します。
$ docker compose run --rm web rspec
以下のような結果になればplaywright
で正常にテストが実行できています。
Tasks
taksを作成できる
Finished in 1.23 seconds (files took 1.17 seconds to load)
1 example, 0 failures
これでPlaywright
をシステムテストの実行環境としたRSpec
の導入は完了です。
参考
https://abillyz.com/dozono/studies/987
https://note.com/dev_onecareer/n/n67d25088b100