2014-05-24
RSpec + Guardで自動テスト実行環境を作る
タイトル通り。
TDDのお試し環境として自動でテストが実行される環境を作りたかったので、構築した。
1.作業ディレクトリを作る
mkdir fizzbuzz
cd fizzbuzz
2.Gemfileを作る
bundle init
3.Gemfileを編集する
# A sample Gemfile
source "https://rubygems.org"
gem 'rspec'
gem 'guard'
gem 'guard-rspec'
gem 'spring'
4. Gemを格納するディレクトリを作る
mkdir vendor
5. Gemをインストールする
$ bundle install --path vendor/
Fetching gem metadata from https://rubygems.org/.........
Fetching additional metadata from https://rubygems.org/..
Resolving dependencies...
Installing timers 1.1.0
.
.
.
Your bundle is complete!
It was installed into ./vendor
6.Guardの設定を行う
# 以下のコマンドでGuardfileが作られる
$ bundle exec guard init
7.Guardファイルを編集する
※ちゃんと調べていないので、記述に誤りがある可能性あり。
- 不要な行を削除
- guard :rspec...から始まる行にcmdオプションを追加
- ルート直下のファイルをwatchするように設定追加
# A sample Guardfile
# More info at https://github.com/guard/guard#readme
guard :rspec, cmd: 'bundle exec rspec' do
watch(%r{^spec/.+_spec\.rb$})
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch(%r{^(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch('spec/spec_helper.rb') { "spec" }
end
8.テストファイルを作成する
- RSpecのテストファイルはspecディレクトリを作成してその配下に作成する
- spec_helper.rbには共通の設定を書くとよいらしい(今回は不要だったかも)
- fizzbuzz.rbのテストファイルであるfizzbuzz_spec.rbを作成
mkdir spec
touch spec/spec_helper.rb
touch spec/fizzbuzz_spec.rb
9.fizzbuzz.rbを編集する
fizzbuzz.rbに適当なメソッドを作成する
# 1を返すだけのsampleメソッドを作成
def sample
1
end
10. fizzbuzz_spec.rbを編集する
require './fizzbuzz.rb'
describe 'Hello rspec' do
# 成功する
it 'sample1' do
sample.should == 1
end
# 失敗する
it 'sample2' do
sample.should == 2
end
end
11. spec_helper.rbを編集する ここには共通の設定などを書くらしい
require 'bundler'
Bundler.require
12.Guardを動かす
$ bundle exec guard start
20:04:02 - INFO - Guard is using Tmux to send notifications.
20:04:02 - INFO - Guard is using TerminalTitle to send notifications.
20:04:02 - INFO - Guard::RSpec is running
20:04:02 - INFO - Guard is now watching at '/Users/hiroki/work/ruby/fizzbuzz'
[1] guard(main)>
この状態で、fizzbuzz_spec.rbなどを上書き保存してみる。
Failures:
1) Hello rspec sample2
Failure/Error: sample.should == 2
expected: 2
got: 1 (using ==)
# ./spec/fizzbuzz_spec.rb:10:in `block (2 levels) in <top (required)>'
Finished in 0.00047 seconds
2 examples, 1 failure
Failed examples:
rspec ./spec/fizzbuzz_spec.rb:9 # Hello rspec sample2
OK。テストが自動で実行され、期待通りテストが1つだけ失敗した。
これで手軽なTDD環境ができた。
<< 前の記事【Chef】ローカルのクックブックを削除する
次の記事 >>Linuxにおけるメモリ管理