Everyday-rails-rspec-モデルテスト
2276 ワード
簡単なテストファイル
テストファイルmodel:
require 'rails_helper'
describe Model_Name do
it 'is .....' do
//test code
end
end
***各テストファイルの先頭には、
require 'rails_helper'
***があります.Rspec新構文
// 1
it 'adds 2 and 1 to make 3' do
(2 + 1).should eq 3
end
// 2
it 'adds 2 and 1 to make 3' do
expect(2+1).to eq 3
end
現在、
should
の文法をできるだけ少なく使用することを奨励しています.最初のテスト
it 'is valid with a firstname, lastname and email' do
contract = Contact.new(
firstname: 'Fugang',
lastname: 'Cui',
email: '[email protected]'
);
expect(contract).to be_valid
end
ここでは、
contact
オブジェクトを作成し、rspec
のbe_valid
マッチングを呼び出してその正当性を検証します.インスタンスメソッドのテスト
Contact
にはname
の方法がありますdef name
[firstname, lastname].join(' ')
end
次に、このインスタンスメソッドのユニットテストを書きます.
it 'return a contact full name as a string' do
contact = Contact.new(
firstname: 'Fugang',
lastname: 'Cui',
email: '[email protected]'
)
expect(contact.name).to eq 'Fugang Cui'
end
クラスメソッドと役割ドメインのテスト
Contact
クラスにおけるby_letter
の方法を試験した.def self.by_letter(letter)
where("lastname LIKE ?", "#{letter}%").order(:lastname)
end
テストコード
it 'returns a sorted array of results that match' do
su = Contact.create(
firstname: 'Kai',
lastname: 'Su',
email: '[email protected]'
)
zhou = Contact.create(
firstname: 'Xing',
lastname: 'Zhou',
email: '[email protected]'
)
zhi = Contact.create(
firstname: 'Kai',
lastname: 'Zhi',
email: '[email protected]'
)
expect(Contact.by_letter("zh")).to eq [zhi, zhou]
expect(Contact.by_letter("zh")).not_to include su
end
せいごうき
rspec-expectations