Написание спецификаций для расширений ассоциаций ActiveRecord - PullRequest
2 голосов
/ 04 июля 2011

Например, с учетом модели

class User < ActiveRecord::Base
  has_many :foos do
    def find_or_create_or_bar!(foo_name, foo_params)
      # ... stuff
      find_by_name(foo_name) || create!(foo_params) || bar!
    end
  end
end

Кто-нибудь может порекомендовать хороший способ написать спецификации для поведения?

describe User do
  describe "#foos" do
    describe "#find_or_create_or_bar!" do
      # ???
    end
  end
end

Есть ли хороший подход к размышлению об этих видах спецификаций? Что я должен указать? Поскольку это ассоциации, можно ли вообще указать класс User здесь?

1 Ответ

1 голос
/ 05 июля 2011

Если вы беспокоитесь о том, что пользовательская спецификация слишком много знает о модели Foo, вы можете попробовать переместить эту логику в метод класса в Foo:

Примерно так должно работать:

class Foo < ActiveRecord::Base

  def self.find_or_create_or_bar!(name, params)
    # ... stuff
    find_by_name(name) || create!(params) || bar!
  end

end

Затем вы можете проверить это вне пользовательской модели / спецификации.Вы также можете провести интеграционный тест, который обеспечит взаимодействие между пользователем и Foo так, как вы хотите.Вы можете использовать Rspec для этого, но я считаю, что Cucumber лучше подходит, когда в нем больше логики.

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