こんにちは、Bullet Trainコアチームメンバーのガブリエルです。
最近はmagic_testを触っていて、結構面白いと思ったので紹介したいと思います。
magic_testとは
Railsのシステムテストで使えるCapybaraのメソッドを直感的に、ブラウザーを介してクリックなどしながらテストを実装していくgemです。
例えば、レコードの作成をテストしたい時は、Capybaraでこんな感じになります。
click_on 'New foo'
fill_in 'Title', with: 'Test Foo'
click_on 'Create Foo'
assert page.has_content? 'Foo was successfully created.'
magic_testでは、これを全部手動で書く代わりに、ブラウザーでクリックしたりして変更をターミナルで確認すると、このコードは全部自動的に自分のファイルに追加されます。
作成者のアンドリュー・カルバー氏の紹介動画を見ていただくと分かると思いますが、瞬時的に何行ものコードを楽に実装できます。
使い方
gemのインストール
# 今現在、最新版はGitHubからダウンロードする必要があります。
group :test do
gem "magic_test", git: "git@github.com:bullet-train-co/magic_test.git"
end
> rails g magic_test:install
> bundle binstubs magic_test
これでtest/system/basics_test.rb
というファイルが作成されますが、そこのmagic_test
メソッドでブラウザーが起動され、テストに書きたい動作をブラウザーで行う、という流れになります。
※ 完全に新しいRailsアプリで動作確認したい方はまずrootをconfig/routes.rb
で設定してください。今回の説明のためrails g scaffold Foo title:string
でモデルを作ってからルーティングをroot "foos#index"
にしました。
準備が整ったら、新しく作られたテストはこの通りになります。
require "application_system_test_case"
class BasicsTest < ApplicationSystemTestCase
test "getting started" do
visit root_url
magic_test
end
end
bin/magic test test/system/basics_test.rb
を実行し、magic_test
メソッドで新しいブラウザーを起動しましょう。
テストコード、デバッガー、そしてブラウザーが表示されるはずです。
まずNew foo
をクリックし、タイトルを"Test Foo"にしてからCreate foo
をクリックします。
新規Fooレコードが上手く作られたメッセージが表示されることもテストしましょう。「Foo was successfully created」を確認するのに、その文字列をハイライトして、Ctrl+Shift+Aを入力します。そして、このメッセージが表示されます。
これで終わり!
次はターミナルでflush
を打ったら、ブラウザーで行った動作は全部自動的に記録されます。
これでexit
を打ってデバッガーから出て、magic_test
メソッドを削除したらそのままテストをコミットできます。
楽でしょう?
まとめ
ということで、直感的にブラウザーを使いながらCapybaraのテストを実装したい人はぜひ使ってみてください。Bullet TrainのDiscordもあるので、質問のある方は気軽に入って話しましょう!