RSpecでアプリをテストしよう

Created by Clemens Helm, @clemenshelm and Floor Drees, @floordrees/

Updated by Ana Schwendler, @anaschwendler

翻訳者: Ryoki Inoue, @r_i_engineer

このガイドでは、Rails Girlsアプリをすでに構築していることを前提に説明します。 アプリ構築の方法はこちら

RSpecは Ruby のテストフレームワークで、Rubyとは少し違うような文法でアプリケーションの動作を記述します。ターミナルにテスト結果が出力されるので、自分の読解力も試されます(冗談です笑)

COACH: テストと行動駆動型開発について説明してください。

1.RSpecのgemを追加しよう

Gemfileを開き、:development:testのendタグの上に、以下の行を追加します。

group :development, :test do
  ...
  gem 'rspec-rails', '~> 3.5'
end

以下を実行し、gemをインストールします。

bundle install

次はアプリケーションの中にspec/ディレクトリを作成します。

mkdir spec/

spec/ ディレクトリはテストファイルが置かれる場所です。最後に次のコマンドを実行します。

rails generate rspec:install

これにより設定に使用される以下のファイルが追加されます。

  • .rspec
  • spec/spec_helper.rb
  • spec/rails_helper.rb

2.最初のテストを作成しよう!

Rubyistはよく「テスト」と「仕様」という言葉を区別せずに使っていますが、それはテストを「spec」フォルダに格納するためです。 そのためには、以下の手順を実行します。

ideaモデルのテストを作成しますが、Railsで簡潔に行うには

  • specフォルダの中にmodelsフォルダを作成するため以下をターミナルで実行します。
mkdir spec/models
  • テストをidea_spec.rb (<モデル名>_spec.rb)として保存します。

その新しいファイルの中で、アイデアに名前があることを最初のテストで確認します。そのため仕様の1つを説明しましょう。

require "rails_helper"

RSpec.describe Idea, type: :model do
  it "has a name" do
    skip
  end
end

ターミナルで以下を実行します。

rspec spec/models/idea_spec.rb

これは、テストがまだ実装されていないため保留中であることが出力されます。

COACH: ターミナル出力についてグーグル検索するよう説明してください。

ではテストを実装しましょう!

require "rails_helper"

RSpec.describe Idea, type: :model do
  it "has a name" do # yep, you can totally use 'it'
    idea = Idea.create!(name: "My Awesome Idea Name") # creating a new idea 'instance'
    expect(idea.name).to eq("My Awesome Idea Name") # this is our expectation
  end
end

これにより期待している出力が得られるはずです。

3.リファクタリング

実際に2つのIdeaを作成して、プロジェクトが正しい方法でIdeaを作成していることを確認することもできます。

require "rails_helper"

RSpec.describe Idea, type: :model do
  it "has a name" do # yep, you can totally use 'it'
    idea = Idea.create!(name: "My Awesome Idea Name") # creating a new idea 'instance'
    second_idea = Idea.create!(name: "My Second Idea Name") # creating another new idea 'instance'
    expect(second_idea.name).to eq("My Second Idea Name") # this is our expectation
  end
end

というように、より多くのことをテストすることができます。

COACH: リファクタリングについて説明してください。

4.テストにTo Doマークを付けてみよう

テストでTo Doリストを作れたら便利ですよね。 RSpecの便利な機能として、特定のテストを保留にする機能があります。つまり、最初に「何を実装するか」を考え、それがうまくいっているかどうかを検証するためのテストを記述するのです。

次のテストは、idea_spec.rbに以下の行を追加して作成しましょう。

it "has a description"

テストを保留としてマークします。

このテストを完成させますか?それとも他のテストについて考えますか?

5.ビヘイビア駆動開発をしてみよう

COACH: ビヘイビア駆動開発について説明してください。

もう一人でいろんなテストを作れるようになったのではないでしょうか。もっといろんなテストを書きたい時はコーチに遠慮なく相談してください。

Happyテスティング!


ガイドを進めていて行き詰まったときはコーチに助けてもらいましょう。また Ruby、Rails、コンソール、テキストエディターについての便利なチートシート も参考にしてみてください。

ガイド

全てのガイドを見る