Тестирование «accepts_nested_attributes_for» в модульном тестировании с использованием Rspec - PullRequest
4 голосов
/ 08 февраля 2012

Я новичок в рельсах и тестировании моделей.Мой класс модели выглядит следующим образом:

class Tester < Person
  has_one :company
  accepts_nested_attributes_for :skill   
end

И я хочу сделать тест для "accepts_nested_attributes_for: skill", используя rspec без каких-либо других драгоценных камней.Как мне это сделать?

1 Ответ

6 голосов
/ 08 февраля 2012

Есть удобные shoulda сопоставители драгоценных камней для тестирования accepts_nested_attributes_for, но вы упомянули, что не хотите использовать другие драгоценные камни. Итак, используя только Rspec, идея состоит в том, чтобы установить attributes хеш, который будет включать обязательные атрибуты Tester и вложенный хеш, называемый skill_attributes, который будет включать обязательные атрибуты Skill; затем передайте его в create метод Tester и посмотрите, не изменит ли он число Testers и число Skills. Примерно так:

class Tester < Person
  has_one :company
  accepts_nested_attributes_for :skill
  # lets say tester only has name required;
  # don't forget to  add :skill to attr_accessible
  attr_accessible :name, :skill
  .......................
 end

Ваши тесты:

 # spec/models/tester_spec.rb
 ......
 describe "creating Tester with valid attributes and nested Skill attributes" do
   before(:each) do
     # let's say skill has languages and experience attributes required
     # you can also get attributes differently, e.g. factory
     @attrs = {name: "Tester Testov", skill_attributes: {languages: "Ruby, Python", experience: "3 years"}}
   end

   it "should change the number of Testers by 1" do
      lambda do
        Tester.create(@attrs)
      end.should change(Tester, :count).by(1)
   end

   it "should change the number of Skills by 1" do
      lambda do
        Tester.create(@attrs)
      end.should change(Skills, :count).by(1)
   end
 end

Синтаксис хэша может отличаться. Кроме того, если у вас есть какие-либо проверки уникальности, убедитесь, что вы генерируете хеш @attrs динамически перед каждым тестом. Ура, приятель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...