在测试时会因为需要经过一些 Service
、Worker
、第三方服务导致真的去运行,进而让测试速度变慢,如果这些 Service
、 Worker
、第三方服务不是当下这个测试的重点我们可以选择将他 mock
或 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
其实与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 该如何正确使用~
>>: Golang + DevOps? Does DevOps Engineer Need to Learn Golang?"
前言: 这一两天我一直很想把.h5档案或是.pb档案 直接转成Xcode可用的.mlmodel档案 ...
前言 在区块链中每条链或多或少都各自发展出自己不同的共识机制,例如 Proof of Work、Pr...
藉由Google Cloud Function建构DialogFlow Fulfillment 透过...
【前言】 今天来介绍 we3.eth.contract 和 web3.utis,有一些概念还不太熟...
改成使用targetCapital这个变数来控制总部位大小,不用每天开机器人的时候还要算加减多少钱。...