1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RSpec導入/テスト実施

Last updated at Posted at 2019-09-25

はじめに

未経験者の方や一人で勉強していたり、プログラミングスクールに通っていた人は
あまりテストコードを書く習慣がないと思いますが
現場では、テストコードを書く作業はとても大事です
今回はruby、RSpecで導入し、簡単なテストコードを書いてみます

RSpecをインストール

1.Gemfileに追加

Gemfile
group :development, :test do
  # 〜 省略 〜
  gem 'rspec-rails'
end

インストールします

$ bundle install

2.RSpecの初期設定

次のコマンドを実行し初期設定をします

$ bin/rails generate rspec:install

RSpecを使うための準備ができました。

テスト実施

テスト対象とするサンプルのモデルを作成

姓(last_name)と名(first_name)を属性に持つUserクラスを作成し、姓名を返却する「full_nameメソッド」を持つ仕様

次のgenareteコマンドを実行

$ rails g model user first_name:string last_name:string

DBのマイグレーションを実行

$ rails db:create
$ rails db:migrate

user.rbにfull_nameメソッドを作成

/models/user.rb
 def full_name
     last_name + " " + first_name
 end

テストコードを書く

expect(実行結果).to eq 期待する結果

文章にすると「実行結果は期待結果と等しいこと」となります

ここでは
full_nameメソッドが姓名を返すことを検証するテストコードを書きます

spec/models/user_spec.rb
RSpec.describe User, type: :model do
  it "姓、名を登録すると、姓名が取得できること" do
    user = User.new(
            last_name:  "侍",
            first_name: "太郎"
    )
    expect(user.full_name).to eq "侍 太郎"
  end
end

テストの実行

RSpecを実行する

bundle exec rspec

実行結果:

テストが成功した場合は,下記のようになります

Finished in 0.08988 seconds (files took 11.41 seconds to load)
1 example, 0 failures

※失敗した場合は、下記のようになります

Failures:

# 〜 省略 〜(エラーの内容が表示される)


Finished in 0.15678 seconds (files took 11.69 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/models/user_spec.rb:4 # User 姓、名を登録すると、姓名が取得できること

ここまでRSpec導入からテスト実施の流れを書いてみました
ありがとうございました

参考:https://www.sejuku.net/blog/47847

1
3
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
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?