测试处理活动记录查询的模块Rspec

时间:2014-10-31 16:31:08

标签: ruby-on-rails ruby rspec

我有一个模块,通过查看他们的habtm关系和belongs_to关系来设置类可访问的属性。它还会检查表并将其属性添加到可访问列表中。

模块看起来像这样

module ModAccessible
  extend ActiveSupport::Concern

  included do
    if table_exists?
      column_names.each {|att| attr_accessible att}
    end
    if reflect_on_all_associations(:has_and_belongs_to_many).any?
      association = reflect_on_all_associations(:has_and_belongs_to_many)
      association.each {|model| attr_accessible model.plural_name.singularize + "_id"}
      association.each {|model| attr_accessible model.plural_name}
    end
  end
end

我测试的输出是这样的..

# == Schema Information
#
# Table name: accessibilitytypes
#
#  id         :integer          not null, primary key
#  title      :string(255)
#  displayit  :boolean
#  cssclass   :string(255)
#  created_at :datetime
#  updated_at :datetime
#

class Accessibilitytype < ActiveRecord::Base

  has_and_belongs_to_many :venues

  validates :title, :presence=>true, :uniqueness=>true
  include ModAccessible  

end

未包含模块

[35] pry(main)> Accessibilitytype.attr_accessible
=> {:default=>#<ActiveModel::MassAssignmentSecurity::WhiteList: {}>}

包含模块

[37] pry(main)> Accessibilitytype.attr_accessible
=> {:default=>#<ActiveModel::MassAssignmentSecurity::WhiteList: {"id", "title", "displayit", "cssclass", "created_at", "updated_at", "venue_id", "venues"}>}

测试

我正在尝试编写测试,但我很难知道如何最好地实现它。 我假设我应该创建一个虚拟类,而不是依赖于真正的类。但是如何在测试环境中建立两个类之间的关系?如何在没有表的情况下存根属性名称?

我将向您介绍我想要实现的目标:

require 'spec_helper'
describe ModAccessible do 
    class Head < ActiveRecord::Base
        has_many :hairs
    end

    class Hair < ActiveRecord::Base
        belongs_to :head
    end
  before do 
    let(:dummy_class) {Hair.new { include MorseAccessible}}
  end

 describe "has_and_belongs_to_many" do 
    expect(dummy_class.attr_accessible).to include :head_id
 end

我希望这很清楚。 感谢

0 个答案:

没有答案