所以我對Rspec很陌生,我試圖弄清楚如何編寫一個將對象作爲構造函數參數的類編寫測試,並設置該對象是一個實例變量。然後在其他方法中調用該實例變量的對象方法。使用gem對象作爲實例變量的類的RSpec測試
例子:
class ClassA
def initialize(string_object, gem_object)
@instance_variable1 = gem_object
@string = string_object
end
def check_validity?(some_arg)
unless @instance_variable1.gemObjectMethod1.gemObjectMethod2(some_arg).empty?
return true
end
false
end
..
..
end
我覺得怎麼寫這個規格很失落。對於一個我不明白什麼指定一個構造函數實際需要。我意識到的是,我不得不找到某種方式來模仿或琢磨我作爲參數獲得的gem_object,但我不知道如何。
在接下來的方法,我已經試過這一點是:
describe '#check_validity?' do
context 'gets empty list' do
let (:actual) { subject.check_validity?("sample") }
before do
allow(subject).to receive(@instance_variable1.gemObjectMethod1.gemObjectMethod2).with("sample").and_return([])
end
it 'returns false' do
expect(actual).to be false
end
end
end
但是這給了我的錯誤與我的構造說,預計2個論點,但被賦予0
任何幫助將非常感激!另外,我無法真正發現任何關於指定構造函數的參數。也許我正在尋找錯誤的地方,或者錯過了一些明顯的東西,因爲這是我第一次使用BDD。
謝謝,這很有幫助。你有關於如何測試構造函數的建議嗎?我正在考慮在調用new之前測試一個對象不存在,然後它執行並且它具有正確的實例變量。我對如何測試對象是否已經創建了空白。 – marauder7
我經常用類似這樣的類做的是通過屬性讀取器(例如attr_reader:string_object,:ClassA頂部的gem_object)提供實例變量。如果你這樣做,那麼測試任務是非常簡單的 - 在實例化後檢查getter方法的值。 – AndyV
謝謝。我確實有一個問題。通過創建小部件方法,我不需要確切地找出gemObjectMethod1返回的內容,是否違背抽象原則? – marauder7