Testing simple STI with FactoryGirl

factory-bot, rspec, ruby, ruby-on-rails, sti

Solution

You can declare the definitions of factories as follow:

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

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

And now you can test base class isolated from its own factory and the same for each inherited class.

Problem

I have got a class, that is the base of some other classes that specializes the behavior: ``` class Task < ActiveRecord::Base attr_accessible :type, :name, :command validates_presence_of :type, :name, :command # some methods I would like to test end ``` The class CounterTask inherits from Task ``` class CounterTask < Task end ``` This all works fine until I am trying to test the base class, since it must have a type. ``` FactoryGirl.define do factory :task do sequence(:name) { |n| "name_#{n}" } sequence(:command) { |n| "command_#{n}" } end end ``` How would you test the basic functionality of the superclass?

Original source