All threads / How to create a minitest fixture for a non database model?

Ask A Question

Notifications

You’re not receiving notifications from this thread.

How to create a minitest fixture for a non database model?

Simon Moro asked in Testing

Hi!

Is there a way to create a fixture for a model that is not in the database? I built my app a few years back following a guide in which the Plans were loaded from a YML file and instantiated as ActiveRecord models, but not persisted in the database.

When I attempt to create the fixtures for Plans, I get:

ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "plans" does not exist

Because, of course, there IS no table for plans.

However, I still need the Plan model available in my tests.

Thanks in advance!

Here the app code - which works... Just need to create fixtures :)


plan_loader.rb - initializer

file_path = "config/plans.yml"
if File.exist?(file_path)
PLANS = YAML.load(File.read(file_path)).with_indifferent_access
end


plan.rb - model

class Plan
def self.plans
@plans ||= PLANS.keys.map { |k| PLANS[k] }
end

def self.all
plans.map { |plan| OpenStruct.new(plan) }
end

def self.where(args)
conditions = args.map do |arg_key, arg_val|
proc { |plan| plan[arg_key] == arg_val }
end
local_plans = plans.select { |plan| conditions.all? { |c| c.call(plan) } }
local_plans.flatten.map { |plan| OpenStruct.new(plan) }
end

def self.find(stripe_id)
plan = plans.find { |p| p[:stripe_id] == stripe_id }
OpenStruct.new(plan)
end
end

Actually... it seems it is auo loading them into the test environment... So, consider this closed :)

Join the discussion

Want to stay up-to-date with Ruby on Rails?

Join 39,609+ developers who get early access to new tutorials, screencasts, articles, and more.

    We care about the protection of your data. Read our Privacy Policy.

    logo Created with Sketch.

    Ruby on Rails tutorials, guides, and screencasts for web developers learning Ruby, Rails, Javascript, Turbolinks, Stimulus.js, Vue.js, and more. Icons by Icons8

    © 2020 GoRails, LLC. All rights reserved.