k01ken’s b10g

He110 W0r1d!

RailsでRspecを使ってテストを行う

開発環境は、Windows 7 Professional(32bit) + ruby 2.3.3p222 + Rails 4.2.1。

Rspecは、Rubyでテストコードを書くためのパッケージです。今回は、rails専用のrspec-railsをインストールして、Rails上でテストコードを書いてみたいと思います。

TDD(テスト駆動開発)は、
1.テストコードを書く
2.テスト実行が失敗するようにプログラムを書く
3.テストが成功するようにプログラムを書く
4.初めに戻る
の繰り返しをしながら書く。

Rspecでは、テストコードのことをスペックという。

1.カレントディレクトリを、テストを実行したいrailsのアプリのルート部分に設定する。
そして、gemfileに以下を追加する

group :development, :test do
	gem 'rspec-rails'
end

そして、

bundle install

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

2.初期設定を行うために以下のコマンドを入力

ruby bin/rails g rspec:install

そうすると、specディレクトリが自動的に作成されている。

3.モデルを作成

ruby bin/rails g model name first_name:string last_name:string

4.マイグレーションする

ruby bin/rake db:migrate RAILS_ENV=test

5./spec/modelsディレクトリに、name_spec.rbというファイルが自動的に作成されているので開く。
RSpec.describe Name, type: :model do~endのブロックの中に以下のコードを追加する。

it "test" do
  	name = Name.new(
  			last_name: "ken",
  			first_name: "koi"
  	)
  	expect(name.full_name).to eq "koiken"
end

/app/models/name.rbを開いて、class Name < ActiveRecord::Base~endに以下のコードを追加します。

	def full_name
		last_name + first_name
	end

6.Rspecを実行します。

ruby bin/bundle exec rspec

実行結果
f:id:k01ken:20180804154915p:plain
本来、koikenと表示されることが期待されているのに、kenkoiと表示されたエラーとなっています。
ここで、name_spec.rbを以下のように修正します。

it "test" do
  	name = Name.new(
  			last_name: "koi",
  			first_name: "ken"
  	)
  	expect(name.full_name).to eq "koiken"
end

そして、もう一度、rspecを実行します。

ruby bin/bundle exec rspec

実行結果
f:id:k01ken:20180804155404p:plain
今度は正しく実行されました。


■参考サイト
【Rails入門】RSpecを使ったテスト方法を初心者向けに基本から解説 | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト
はじめてのRSpec - まずテスト書いてからコード書くシンプルなチュートリアル
Railsでテストコードは書こう | Railsの小技 | DoRuby