如何在rspec测试中创建时态表

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

我有一个模型地址和一个模块可寻址为AR类注入一个* belongs_to:address *关系,其中包括此模块可寻址。

我想测试包含此模块的类具有这种关系。

班级地址:

class Address < ActiveRecord::Base
  attr_accessible :street, :zip
end

模块可寻址

module Addressable
  def self.included(base)
    base.class_eval <<-CLASS_METHODS
          belongs_to :address
          validates :address, presence: true
    CLASS_METHODS
  end
end

测试代码:

require 'spec_helper'
describe 'Addressable' do

  subject do
    class OtherModel < ActiveRecord::Base
      include Addressable
    end
  end

  before(:all) do
    connection = ActiveRecord::Base.connection
    connection.create_table :othermodels do |t|
      t.references :address
    end
  end

  after(:all) do
    connection.drop_table :othermodels
  end

  it "should validate presence of address"do
    should validate_presence_of(:address)
  end

  it "should belongs to address" do
should belong_to :continent
  end
end

我的测试失败了

 1) Addressable should validate presence of address
   Failure/Error: should validate_presence_of(:address)
   NoMethodError:
     undefined method `address=' for OtherModel(Table doesn't exist):Class

我认为之前(:all)没有做它的工作。我该如何创建这个表。

提问于
用户回答回答于

您可以尝试在OtherModel定义中显式地将表名设置为模型中存在的可寻址的表。

table_name = "some table that exists with addressable columns"
用户回答回答于

迟了四年,但我想测试类似的东西并找到你的问题。我认为你有一切正确,除了应该按照other_models惯例调用表(你的类是OtherModel)。

扫码关注云+社区

领取腾讯云代金券