【Rails】RSpecとCapybaraのFeatureテスト書き方まとめ – にょけんのボックス

プログラミング
スポンサーリンク

 

こんにちは、Railsエンジニアにょけんです。

「RSoec」と「Capybara」でFeatureテストを書く手順をまとめました。

Featureテストを行う理由って?

Featureテストは、アプリの利用者が使うものと全く同じWeb フォームを使ってテストできます。

これがコントローラテストと大きく異なる点。

コントローラテストは直接パラメータを送信して検証するため、「そもそもブラウザにフォームが用意されていなかった」みたいな凡ミスが防げないんだよね。

 

スポンサーリンク

Rails5.0以前の場合は、「Capybara」をGemfileに追加

「Capybara」はブラウザ操作をシミュレートするgemで、Featureテストにうってつけです。

Capybara を使うと、「リンクのクリック」「フォームの入力」「画面表示の検証」などをコマンドでシミュレートできるよ!

で、このCapybaraはRails5.1以降にはデフォルトで入っています。

Rails5.0以前であれば、テスト環境にCapybaraをインストールしましょう。

[Gemfile]

group :test do    gem 'capybara'  end

 

[ターミナル]

$ bundle install

 

スポンサーリンク


「Capybara」をRSpecで使えるように設定する

Capybaraがアプリに入っていても、それをRSpecで使うように設定しないと意味がありません。

てわけで、[spec/rails_helper.rb]に、以下オレンジ色の箇所を追加しましょう。

[spec/rails_helper.rb]

# This file is copied to spec/ when you run 'rails generate  # rspec:install'  ENV['RAILS_ENV'] ||= 'test'  require File.expand_path('../../config/environment', __FILE__)  # Prevent database truncation if the environment is production  abort("The Rails environment is running in production mode!") if \  Rails.env.production?  require 'spec_helper'  require 'rspec/rails'  # Add additional requires below this line. Rails is not loaded until this point!  require 'capybara/rspec'  # 以下省略...

 

実際にFeatureテストを書いてみよう

カンタンな例として、UserモデルとTaskモデルがあり、UserがTaskを作成するという動作をテストしてみましょう。(「User:Task = 1:多」の関連付けがある想定です)

「rails generate rspec:feature tasks」でテスト用のファイルを作成し、ファイル内でブラウザの動きをシミュレートしましょう。

トップページからUserがTaskを作成するには、以下の手順を踏みます。

  1. トップページへアクセス
  2. サインインページへ遷移
  3. メアドとパスワードを入力してログイン
  4. タスク作成ページへ遷移
  5. タスク名、タスクの説明を入力し、作成ボタンをクリック
  6. タスク作成成功のフラッシュメッセージが表示されること

これらの動作を行なった結果、タスクが1つ増えるということをテストできればOKですね?

[spec/features/tasks_spec.rb]

require 'rails_helper'  RSpec.feature "Tasks", type: :feature do    # ユーザーは新しいプロジェクトを作成する    scenario "user creates a new task" do      # ユーザーを作成      @user = User.create(        first_name: "John",        last_name: "Brawn",        email: "test@example.com",        password: "i-am-john"      )            # トップページへアクセス      visit root_path            # サインインページへ遷移      click_link "Sign in"        # メアドとパスワードを入力してログイン      fill_in "Email", with: @user.email      fill_in "Password", with: @user.password      click_button "Log in"          # タスク作成時に、@userのタスクが1つ増えることを記載      expect {        # タスク作成ページへ遷移        click_link "New Task"          # タスク名、タスクの説明を入力し、作成ボタンをクリック        fill_in "Name", with: "Test Task"        fill_in "Description", with: "This is Test"        click_button "Create Task"          # タスク作成成功のフラッシュメッセージが表示されること        expect(page).to have_content "Task was successfully created"      }.to change(@user.tasks, :count).by(1)    end  end

 

上記で使った「visit」「click_link」「fill_in」などが、Capybara導入で使えるようになったコマンドです。

参考として、よく使うコマンドも載せておきますね。

  • visit “URL名”
    →URLへアクセス
  • click_link “リンク名”
    →リンクをクリック
  • click_button “ボタン名”
    →ボタンをクリック
  • fill_in “フォーム名”, with: “入力値”
    →フォームに入力値を入力
  • check “チェックボックス名”
    →チェックボックスにチェックを入れる
  • uncheck “チェックボックス名”
    →チェックボックスからチェックを外す
  • choose “ラジオボタンのラベル名”
    →ラジオボタンのラベルを選択する
  • select “オプション名”, from: “メニュー名”
    →セレクトメニューからオプションを選択する

全容はコチラの公式ドキュメントをご参照ください。

スポンサーリンク

Visited 116 times, 1 visit(s) today

コメント

タイトルとURLをコピーしました