RSpec入門(v3.5.4)

Rspecについてはこちらにまとめようと思います。
(ちょいちょい追記予定)

describe

test対象

describe 'Foo' do
end

context

testの条件

describe 'Foo' do
  context 'Bar' do
  end
end

it

test内容
exampleと同じ(シンタックスシュガー)

it 'hoge is foo' do
  /* .... */
end

example 'hoge is foo' do
  /* .... */
end

let

beforeでも書けるけど、基本的にはletで書いていった方が良さそう

before do
  @hoge = Hoge.new(foo: 'Foo', bar: 'Bar')
end

it 'valid' do
  expect(@user).to be_valid
end
let(:hoge) {
  Hoge.new(foo: 'FOO', bar: 'BAR')
}

it 'valid' do
  expect(@user).to be_valid
end

expect

expect(foo).to eq(bar)
expect(foo).not_to eq(bar)

expect(foo).to match /^abc/
expect(foo).to match_array [1,2,3]

subject, is_expected

subject { foo.name } # 宣言

is_expected.to eq('baz')

to

expect(foo).to eq('abc')

to_not, not_to

どっちで書いても同じ。英文法的に使い分けるらしい。

expect(foo).to_not eq('abc')
expect(foo).not_to eq('abc')

Matcher

eq()

等しい

expect(foo).to eq('abc')

be

等号、不等号用

expect(foo).to be >= 10

be_a_kind_of

配列かどうか

expect(foo).to be_a_kind_of(Array)

start_with()

aから始まる

expect(foo).to start_with('a')

end_with()

zで終わる

expect(foo).to end_with('z')

and,or

上の2つをつなぐ下記のように

# aから始まってzで終わる
expect(foo).to start_with('a').and end_with('z')

# aから始まるかzで終わる
expect(foo).to start_with('a').or end_with('z')

render_template

expect(foo).to render_template(:show)
expect(foo).to render_template("/foo/show")

contain_exactly

expect([4,10,200]).to contain_exactly(200,4,10)

be_json_as

let(:spec) { {"foo" => contain_exactly( {'bar' => 'BAR'}, {'baz' => 'BAZ'} ) } }
expect(foo).to be_json_as(spec)

pry-byebug

Gemを追加

group :development, :test do
  gem 'pry-byebug'
end
binding.pry # 処理停止

rspecが停止したところで

[1]pry(#<Class>)> @hoge

のような感じで中身を確認できる

使えるコマンドは

step

next

finish

continue