我想要一個類的實例方法返回self,並且使用另一個類實例self作爲init。
不過我掙扎來看看如何succintly符合規範的:如何從should_receive塊返回接收者實例的自我
::Api.should_receive(:new).once do |arg|
arg.should be_an_instance_of(::Cli)
end
當運行這個天賦,這確保了未來方法被調用的真實,而不是API實例,如預期,那就是回報塊的值。例如:
class Cli
def eg
api = Api.new(self)
api.blowup # undefined method for true
end
end
我真的很喜歡塊而不調用另一個呼叫在規範返回API實例自我Api.new(...)
,下面的例子就這一點,我的腦海裏非rspec的讀者會奇怪,爲什麼當清晰Api.new(...)
被多次調用時,spec會通過。
任何人都可以建議如何做到最好?
目前的解決方案: 這倒像是::Api.new(...)
被稱爲三次:第一次創建api
,曾經創造cli
,曾經創造start
。然而,一個電話的規格通過。我明白爲什麼這是正確的,所以不是一個錯誤。不過,我想要一個規範,一個不熟悉rspec的讀者可以掃描,並且不會產生Api.new
已被多次調用的印象。還請注意...once.and_return(api){...}
不起作用,該塊需要返回api
才能通過。
let(:cli){ ::Cli.start(['install']) }
let(:start){ ::Cli.start(['install']) }
it 'is the API' do
api = ::Api.new(cli)
::Api.should_receive(:new).once do |arg|
arg.should be_an_instance_of(::Cli)
api
end
start
end
謝謝@shioyama,謝謝你的建議。不幸的是,它沒有鍛鍊。我已經添加了我目前擁有的內容,但感覺非常不雅。希望這能澄清這個問題,你會看到更好的方法? – Hedgehog
更新了我的答案,看看是否有效。 –
我做了一些小小的調整,並通過了vladr的批准。 – Hedgehog