15. 基本的な書き方
describe Array do
context 'when new' do
it 'should be empty' do
Array.new.should be_empty
end
it 'size should == 0' do
Array.new.size.should == 0
end
end
end
14/63
RSpec と Cucumber Powered by Rabbit 0.9.2
17. ドキュメントっぽい出力
% rspec -fd array_spec.rb
Array
when new
should be empty
size should == 0
Finished in 0.00068 seconds
2 examples, 0 failures
16/63
RSpec と Cucumber Powered by Rabbit 0.9.2
18. 冗長
describe Array do
context 'when new' do
it 'should be empty' do
Array.new.should be_empty
end
it 'size should == 0' do
Array.new.size.should == 0
end
end
end
17/63
RSpec と Cucumber Powered by Rabbit 0.9.2
19. 簡潔に
describe Array do
context 'when new' do
it{should be_empty}
its(:size){should == 0}
end
end
18/63
RSpec と Cucumber Powered by Rabbit 0.9.2
20. 出力
% rspec -fd b.rb
Array
when new
should be empty
size
should == 0
Finished in 0.00078 seconds
2 examples, 0 failures
19/63
RSpec と Cucumber Powered by Rabbit 0.9.2
21. subject
describe Array do
context 'when new with 3' do
subject{Array.new(3)}
it{should == [nil, nil, nil]}
its(:size){should == 3}
end
end
20/63
RSpec と Cucumber Powered by Rabbit 0.9.2
22. before & after
describe Hoge do
before do # 前処理
@hoge = Hoge.new
end
after do # 後処理
@hoge.close
end
it '...' do
@hoge.fuga.should == 123
end
end
21/63
RSpec と Cucumber Powered by Rabbit 0.9.2
31. 既存オブジェクトのメソッドを置
き換え可能
it の中だけで有効
# 特定の時刻で実行したいテスト
before do
t = Time.local(2011,1,15,18,30,0)
Time.stub(:now).and_return t
end
its(:tmpfile){should == '20110115183000.tmp'}
30/63
RSpec と Cucumber Powered by Rabbit 0.9.2
32. モックを返す
before do
# どんなメソッド呼び出しもエラーにしない
logger = double('Logger').as_null_object
Logger.stub(:new).and_return logger
end
it ...
31/63
RSpec と Cucumber Powered by Rabbit 0.9.2
56. step_definitions ファイル
前提 'サーバーが起動している' do
system 'ps -ef | grep -q postfix/master'
$?.should be_success
end
もし '25番ポートに接続する' do
@sock = TCPSocket.new('localhost', 25)
end
ならば '"220 "応答が返されること' do
@sock.gets.should =~ /^220 /
end
55/63
RSpec と Cucumber Powered by Rabbit 0.9.2
57. 少し動的に
前提 'サーバーが起動している' do
system 'ps -ef | grep -q postfix/master'
$?.should be_success
end
もし /(d+)番ポートに接続する/ do |port|
@sock = TCPSocket.new('localhost', port)
end
ならば /"(.*)"応答が返されること/ do |status|
@sock.gets.should =~ /^#{status}/
end
56/63
RSpec と Cucumber Powered by Rabbit 0.9.2
58. 既存の定義を利用して定義
シナリオ: RCPT TO が受け付けられる
前提 MAIL FROM まで指定済み
もし RCPT TO で tommy@localhost を指定する
ならば "250 "応答が返されること
57/63
RSpec と Cucumber Powered by Rabbit 0.9.2
59. 既存の定義を利用して定義
前提 'MAIL FROM まで指定済み' do
もし '25番ポートに接続する'
ならば '"220 "応答が返されること'
@sock.puts "MAIL FROM:<hoge@example.com>"
ならば '"250 "応答が返されること'
end
もし /RCPT TO で (.*) を指定する/ do |rcpt|
@sock.puts "RCPT TO:<#{rcpt}>"
end
58/63
RSpec と Cucumber Powered by Rabbit 0.9.2