LoginSignup
1
0

magic_testでシステムテストを楽に書こう

Posted at

こんにちは、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"にしました。

準備が整ったら、新しく作られたテストはこの通りになります。

test/system/basics_test.rb
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メソッドで新しいブラウザーを起動しましょう。

magic_test 1.png

テストコード、デバッガー、そしてブラウザーが表示されるはずです。

まずNew fooをクリックし、タイトルを"Test Foo"にしてからCreate fooをクリックします。

新規Fooレコードが上手く作られたメッセージが表示されることもテストしましょう。「Foo was successfully created」を確認するのに、その文字列をハイライトして、Ctrl+Shift+Aを入力します。そして、このメッセージが表示されます。

magic_test 2.png

これで終わり!
次はターミナルでflushを打ったら、ブラウザーで行った動作は全部自動的に記録されます。

magic_test 3.png

これでexitを打ってデバッガーから出て、magic_testメソッドを削除したらそのままテストをコミットできます。

楽でしょう?

まとめ

ということで、直感的にブラウザーを使いながらCapybaraのテストを実装したい人はぜひ使ってみてください。Bullet TrainのDiscordもあるので、質問のある方は気軽に入って話しましょう!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0