iT邦幫忙

2021 iThome 鐵人賽

DAY 12
0
自我挑戰組

Rails測試寫起乃!!!系列 第 12

Day12 測試寫起乃-mock、stub

  • 分享至 

  • xImage
  •  

在測試時會因為需要經過一些 ServiceWorker、第三方服務導致真的去運行,進而讓測試速度變慢,如果這些 ServiceWorker、第三方服務不是當下這個測試的重點我們可以選擇將他 mockstub起來,直接回傳指定的值會讓測試更快!

stub

我的理解就是stub能夠⽤在任意的物件及類別上,假造回傳值或是可以造假方法

describe 'create user' do
  let(:user) { create(:user) }
  it 'when user name is ck' do
    expect(user).to receive(:name).and_return('ck') # 指定 factory 建出來的 user name 回傳 'ck'
    allow_any_instance_of(User).to receive(:name).and_return('ck') # 可以使所有User instance 的 name 都會回傳 'ck'
    expect(user.name).to eq('ck')
  end
end

mock

mock其實與stub相似,不同於如果沒有被呼叫到就會測試失敗

describe 'create user' do
  let(:user) { create(:user) }
    it 'when user mock' do
      expect(user).to receive(:change_name).and_return(false)
      expect(user.hi('ck2')).to eq(false)
    end
end

如果行為沒發生,一定會失敗

Failures:

  1) User count user when user mock
     Failure/Error: expect(user).to receive(:change_name).and_return(false)

       (#<User id: 1, created_at: "2021-09-12 13:38:16.455782000 +0000", updated_at: "2021-09-12 13:38:16.455782000 +0000", name: "ck-2", email: "ck-2@gmail.com", phone: nil, shop_id: nil>).change_name(*(any args))
           expected: 1 time with any arguments
           received: 0 times with any arguments

明天會來講解 cucumber 的基本寫法,未來會在更新前片幾篇的篇幅,畢竟都是臨時趕出來的...會想辦法寫得更加完整!

參考來源:
ihower介紹rpsec-mock
必看!裡面也有介紹到一些關於 mock stub 該如何正確使用~


上一篇
Day11 測試寫起乃-FactoryBot-create、build、build_stubbed
下一篇
Day13 測試寫起乃 - controller test
系列文
Rails測試寫起乃!!!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言