所以在我的不斷髮展rspecs對我的回報率模型,我結束了兩個測試如出一轍:保持乾燥,但要重複用於不同的原因
it 'is valid when x is zero' do
foo = build(:foo, x: 0, y: 10)
expect(foo.valid?).to be_truthy
end
it 'is valid when y is ten' do
foo = build(:foo, x: 0, y: 10)
expect(foo.valid?).to be_truthy
end
這出現,因爲我寫的規格進行驗證首先x,然後爲y添加規範。
顯然,重構的時間。我可以刪除其中一個規格,因爲它們是重複的:保持乾燥。
現在,每個規格的內部可能完全相同,但it
的描述是不同的。我不想丟失那裏的信息。
我的問題是 - 在這種情況下是否可以保持重複的規格完好無損,還是應該「合併」它們並重新描述it
描述?也許:
it 'is valid when x is zero and y is ten' do
foo = build(:foo, x: 0, y: 10)
expect(foo.valid?).to be_truthy
end
但在我看來,我現在有一個規範是測試兩件事情(在富模型兩種驗證條款)。這也不好,無論如何。有潛伏的氣味。
是否有另一種方法我錯過了?
完全可以有兩個測試恕我直言 –
這要看情況。第一次測試是否應該通過'y:nil'? 'y:false'?與'y:MyY.new'?如果沒有,你已經陷入困境。人們應該想要什麼正在測試。我會用4個測試來處理'{x,y}∈[good,bad]'。 – mudasobwa
例如,如果您可以使用['#be_valid'](http://www.rubydoc.info/gems/rspec-rails/RSpec%2FRails%2FMatchers%3Abe_valid),爲什麼要檢驗'valid?'是否真實。 'expect(foo).to be_valid'這個想法完全一樣,並且使我的觀點更具可讀性。 – engineersmnky