web-dev-qa-db-ja.com

FactoryGirlで簡単なSTIをテストする

動作を専門とする他のいくつかのクラスのベースであるクラスがあります。

class Task < ActiveRecord::Base
  attr_accessible :type, :name, :command
  validates_presence_of :type, :name, :command

  # some methods I would like to test

end

CounterTaskクラスはTaskから継承します

class CounterTask < Task 
end

基本クラスは型を持っている必要があるため、テストするまではこれで問題なく動作します。

FactoryGirl.define do
  factory :task do
    sequence(:name) { |n| "name_#{n}" }
    sequence(:command) { |n|  "command_#{n}" }
  end
end

スーパークラスの基本的な機能をどのようにテストしますか?

30
Mark

工場の定義は次のように宣言できます。

FactoryGirl.define do
  factory :task, class: 'Task' do
    shop
    currency
    value 10
  end

  factory :counter_task, parent: :task, class: 'CounterTask' do
  end
end

これで、独自のファクトリから分離され、継承されたクラスごとに同じ基本クラスをテストできます。

62
emaxi