2017-06-21 39 views
0

我們目前主要使用認知機器人shoulda gem來指導我們導軌模型的功能。應該用shoulda嗎?

看起來應該提供的很多匹配器實際上是測試導軌行爲。例如。

describe Blog do 
    it { should have_many(:posts) } 
end 

只是測試,從模型定義

class Blog < ActiveRecord::Base 
    has_many :posts 
end 

此代碼實際工作。

是不是測試導軌行爲(而不是我們的模型的行爲)? 這是不是一般要避免的事情?

+0

在您的應用程序中某處使用了圖像'posts',並且某人刪除了'has_many:posts',沒有測試,直到應用程序崩潰纔會知道有問題。 – Thanh

回答

0

這種問題可以很容易地導入一場火焰戰爭,但無論如何,我會給我兩分錢。

我大部分時間都在使用shoulda matchers,我同意你的觀點,那就是這種測試起初看起來可能是多餘的。那麼爲什麼我繼續使用它們?

當你在做BDD時,你沒有測試單個單元,但是你實際上正在測試一個對象行爲。在我看來,知道Blog實體響應posts方法並收集了許多posts,這是Blog類的行爲的一部分。所以我想測試它。

此外,如果按照TDD週期嚴格的,你不能從理論上增加了

has_many :posts 

線在不違反原則,你應該先寫一個測試。

正如許多其他領域一樣,最終的答案取決於項目。如果你有一個包含很多模型的大型項目(或者一個越來越像這樣的項目),你可能真的想要測試這些接口。

如果你只有一個Post模型與Author,它可能看起來像一個矯枉過正。但在這種情況下,它會花費你像4行測試...所以爲什麼不呢?