使用FactoryGirl测试简单的STI

Mar*_*ark 30 ruby rspec ruby-on-rails sti factory-bot

我有一个类,这是一些专门处理行为的其他类的基础:

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

  # some methods I would like to test

end
Run Code Online (Sandbox Code Playgroud)

CounterTask类继承自Task

class CounterTask < Task 
end
Run Code Online (Sandbox Code Playgroud)

这一切都正常,直到我尝试测试基类,因为它必须有一个类型.

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

您如何测试超类的基本功能?

ema*_*axi 63

您可以声明工厂的定义如下:

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

  factory :counter_task, parent: :task, class: 'CounterTask' do
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,您可以测试从其自己的工厂隔离的基类,并为每个继承的类测试相同的基类.

  • 我只需要将`class`选项传递给子工厂来完成这项工作:`factory:counter_task,class:'CounterTask'do`(父工厂也不需要`class`选项). (2认同)