1
他們說完美的測試只包括測試框架和被測試的類;其他一切應該被嘲笑。那麼,關聯呢?如何編寫rails關聯的規範?
我並不是指簡單的has_many
,belongs_to
關聯,但關聯擴展和範圍。我真的很想寫範圍的規格,但我不知道如何去做。
他們說完美的測試只包括測試框架和被測試的類;其他一切應該被嘲笑。那麼,關聯呢?如何編寫rails關聯的規範?
我並不是指簡單的has_many
,belongs_to
關聯,但關聯擴展和範圍。我真的很想寫範圍的規格,但我不知道如何去做。
我得到了這個趕上了。在Rspec中,他們擺脫了「單元測試」的想法。在實踐中,Rails中的單元測試意味着,至少對我而言,測試模型上的屬性值。但你是對的,關於協會呢?
在Rspec中,您只需創建一個spec/models
目錄並測試您的模型。在模型規範(spec/models/user_spec.rb
)的頂部,你有你的單元測試(測試你的屬性),那麼您測試下面的每個協會:
require 'spec_helper'
describe User do
context ":name" do
it "should have a first name"
it "should have a last name"
end
# all tests related to the gender attribute
context ":gender" do
it "should validate gender"
end
# all tests related to "belongs_to :location"
context ":location" do
it "should :belong_to a location"
it "should validate the location"
end
# all tests related to "has_many :posts"
context ":posts" do
it "should be able to create a post"
it "should be able to create several posts"
it "should be able to list most recent posts"
end
end
但現在你在你的User
測試Post
和Location
模型測試?是的。但Post
模型將會有一些額外的東西超出它與用戶相關的範圍。與Location
一樣。所以,你有一個像spec/models/location_spec.rb
:那
require 'spec_helper'
describe Location do
context ":city" do
it "should have a valid city"
end
context ":geo" do
it "should validate geo coordinates"
end
end
都不應該在我看來,被嘲笑。在某些時候,您必須實際測試關聯正在保存且可查詢。就在這裏。考慮一下,在模型規範中,您有屬性的「單元測試」和關聯的「集成測試」。
很好的解釋,謝謝對的!我想補充一點,你應該具備以下規則還:測試你的模型有關聯的部分(用戶 - >評論==測試,誰創造,獲取,從用戶對象的透視刪除);不要那個'ActiveRecord'起作用,只測試你對'ActiveRecord'的用法。 – mliebelt
我想補充一句,「測試你自己編寫的代碼。」如果你的模型類與關聯做的唯一事情就是定義它,那麼確保關聯被定義就足夠了(比如,通過確保你可以訪問fixture上的has_many數組)。如果方法調用has_many#build,請測試您的方法,而不是has_many的#build功能。不要採取這種做法,「我的模型提供財產的保證'posts'可以做x,y,z,所以我必須測試它可以做x,y,z。這就是瘋狂。選項組合可算作「你的代碼」來測試imo –