#目的#
新しいポートフォリオを作成する際に、RSpecを利用したTDD(テスト駆動開発)
に挑戦するため、RSpec導入します。ついでにRSpecによるテストの簡単な記述ルールについて説明したいと思います。
#RSpecとは#
RSpec とは Ruby プログラマー向けのBDD(Behaviour-Driven Development) ツールです。
BDD(Behaviour-Driven Development)は、
できることは普通のテストと同じで、加えて、
これから作成しようとするプログラムに期待される「振る舞い」や「制約条件」、
つまり「要求仕様」に近い形で、**自然言語(英語)**を併記しながらテストコードを記述することができるものです。
メリットは、テストコードの可読性があがる上、テストコードが要求仕様となりうることと、
要求仕様からテストコードを起こす際も、スムーズにコードに移行しやすいことです。
#RSpecの導入#
まずは RSpec の Gem パッケージをインストールします。
・・・
group :development, :test do
gem 'rspec-rails', '~> 3.5'
end
・・・
ちなみに、RSpec は test フレームワークなのに、なぜインストールグループに development を追加するかというと、RSpec にはテストファイルを作成する generator があり、それを利用するために default の RAILS_ENV である development にインストールしておくと楽だからです。
インストールします。
$ bundle install
Gem パッケージがインストールされたら、次は Rails ソフトウェアに対して RSpec 用の初期ファイルをインストールする。
$ rails generate rspec:install
Running via Spring preloader in process 9045
create .rspec
create spec
create spec/spec_helper.rb
create spec/rails_helper.rb
#テストファイルの記述ルール#
テスト記述ルールとしては、テストする内容を説明する文章を引数として、describe, context, it を使って記述します。
1 つのテスト内容は it で記述し、期待する動作(expect)を 1 つ含めます。
require 'rails_helper'
RSpec.describe Diff, type: :model do
it "is valid with diff string" do
diff = Diff.new(diff: "some diff")
expect(diff).to be_valid
end
end
it に続く文字列は動詞から始める。
ここまでで 1つのテスト項目の記述ですが、実行すると、なぜitの次が動詞から始まる説明文を記述していたのか理由が分かります。
Diff
is valid with diff string
Finished in 0.02296 seconds (files took 0.35495 seconds to load)
1 example, 0 failures
このように、describe, it で記述した内容がテスト結果に表示されるため、実行結果を見れば何をテストしているのかが分かるようになっています。
テストが特定の条件を想定する場合は context を使ってその条件を記述します。
ここで describe, context は入れ替えても動作しますし、以下の例では describe, context は記述せず it だけ記述しても動作しますが、テストが想定する内容が分かりやすくなるので積極的に使いましょう。
require 'rails_helper'
RSpec.describe Micropost, type: :model do
describe "search posts by term" do
context "when no post is found" do
it "returns an empty collection" do
expect(Micropost.search("John Doe")).to be_empty
end
end
end
end
#感想#
RSpecの導入は思っていたより簡単でした。
RSpecテストの作成についてまだ知識が浅いため今回は初歩のところだけ説明しました。
知識がついたらテストの作成方法について詳しいブログを投稿します!!