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オブジェクトを作成し、rspecbe_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