所以我在 gem 中有一些類,我正在努力測驗我的代碼中的特定行。該類Foo有兩個屬性,它們都是類的實體User和Client. 我如何測驗Foo.get_events(date)呼叫該方法的方法Client.get_events(user, date)?
class Foo
attr_reader(:user, :client)
def get_events(date)
client.get_events(user[:id], date)
end
end
class Client
def get_events
# Makes API call here
end
end
我已經模擬了請求Client.get_events并且該方法已成功測驗,但我無法弄清楚如何測驗Foo.get_events呼叫該方法的方法。
謝謝!
uj5u.com熱心網友回復:
我會這樣做:
describe 'Foo#get_event' do
let(:client) { instance_double(Client) }
let(:user) { { id: 'user_id' } }
let(:date) { Date.today }
subject(:foo) { Foo.new(user, client) }
before { allow(client).to receive(:get_events).and_return(true) }
it "delegates to the client's method" do
foo.get_event(date)
expect(client)
.to have_recieved(:get_events)
.with('user_id', date)
.once
end
end
user由于user[:id]呼叫,我認為這是一個哈希。的實體Foo可能需要以不同的方式初始化才能設定user,client但您沒有分享您的initialize方法的外觀。
此外,您會注意到您的測驗將立即失敗,因為您將兩個引數傳遞給client.get_events(user[:id], date),但其中的方法定義Client不接受任何引數。它可能必須更改為以下內容:
class Client
def get_events(user_id, date)
# Makes API call here
end
end
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/508363.html
