Я тоже догнал это. В 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
Но теперь вы тестируете модели Post
и Location
в своих тестах User
? Ага. Но модель 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
Ничто из этого не должно быть осмеяно по моему мнению. В какой-то момент вы должны на самом деле проверить, что ассоциации сохраняются и могут быть запрошены. Вот здесь Подумайте об этом, так как в спецификациях модели у вас есть «Юнит-тест» для атрибутов и «Интеграционные тесты» для ассоциаций.