Как написать спецификации для рельсовых ассоциаций? - PullRequest
1 голос
/ 16 сентября 2011

Говорят, что идеальный тест включает только тестовую среду и класс, который тестируется;все остальное надо издеваться.Тогда как насчет ассоциаций?

И я имею в виду не простые has_many, belongs_to ассоциации, а расширения расширений и области действия.Мне бы очень хотелось написать спецификации для областей применения, но я просто не могу понять, как это сделать.

1 Ответ

1 голос
/ 17 сентября 2011

Я тоже догнал это. В 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

Ничто из этого не должно быть осмеяно по моему мнению. В какой-то момент вы должны на самом деле проверить, что ассоциации сохраняются и могут быть запрошены. Вот здесь Подумайте об этом, так как в спецификациях модели у вас есть «Юнит-тест» для атрибутов и «Интеграционные тесты» для ассоциаций.

...