Day12 测试写起乃-mock、stub

在测试时会因为需要经过一些 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: "[email protected]", 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 该如何正确使用~


<<:  【Day12】原始型别及物件型别

>>:  Golang + DevOps? Does DevOps Engineer Need to Learn Golang?"

IOS、Python自学心得30天 Day-20 .h5 to .tflite to .mlmodel

前言: 这一两天我一直很想把.h5档案或是.pb档案 直接转成Xcode可用的.mlmodel档案 ...

Proof of Work 工作量证明

前言 在区块链中每条链或多或少都各自发展出自己不同的共识机制,例如 Proof of Work、Pr...

[Day17] 藉由DialogFlow Fulfillment 实践对话流设计

藉由Google Cloud Function建构DialogFlow Fulfillment 透过...

Day 16【web3.js】I KNOW BINARY AND HEXADECIMAL

【前言】 今天来介绍 we3.eth.contract 和 web3.utis,有一些概念还不太熟...

更新网格交易机器人

改成使用targetCapital这个变数来控制总部位大小,不用每天开机器人的时候还要算加减多少钱。...