在RSpec中测试动态类方法的正确方法

时间:2016-12-08 11:29:45

标签: ruby-on-rails ruby rspec rspec-rails

我的代码使用元编程并具有动态方法。我试图找出在RSpec3中测试它们的最佳方法。以下是要测试的示例:

module Placements
  class Status < ActiveRecord::Base
    ...
    class << self
      Placements::Status.unscoped.pluck(:system_name).each do |system_name|
        define_method system_name do
          unscope(where: :archived).find_by_system_name(system_name)
        end
      end
    end
    ...
  end
end

使用Placements::Status之类的实例

Placements::Status.create(system_name: "visible")

我希望Placements::Status.visible方法存在。由于动态方法依赖于数据库中的数据,我试图找出用RSpec捕获它的最佳方法

要创建记录然后再次加载模型文件,我在测试套件中使用before钩子:

before(:each) do
  create(:visible)
  load 'app/models/placements/status.rb'
end

它有效,我可以拨打Placements::Status.visible,但它看起来并不优雅(使用工厂)。是否有更好/正确的方法来重新加载类来查看在数据库中创建的记录?在挂钩或类似之前的任何其他?

0 个答案:

没有答案
相关问题