如何测试依赖于RSpec和Sinatra关联的类方法



我写了一些RSpec测试,成功地用:let语句创建了对象。然而,测试环境不能维护在其他地方正常工作的关联。下面是一个类的例子,它会出现一个NoMethodError (nil:NilClass的未定义方法' money')。钱是存货清单中的一栏。任何想法吗?

class Inventory < ActiveRecord::Base
  belongs_to :character
  def self.return_money(character)
    character.inventory.money
  end
end

这里是一个相应的规范文档的例子:

require 'spec_helper'
describe 'Test methods' do
  let(:trader) {
    Character.create(
      name: "Trader",
      location_id: 1)
  }
  let(:trader_inventory) {
    Inventory.create(
       character_id: trader.id,
       storage_capacity: 50000,
       money: 20000,
       markup: 1.35)
  }
  it "test method" do
    expect(Inventory.return_money(trader)).to eq(100)
  end
end

没有理由不工作。RSpec并不特别,它只是普通的Ruby代码。您可以通过将所有代码移动到单个文件中来确认这一点,例如:

ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
ActiveRecord::Base.logger = Logger.new(STDOUT)
class Inventory < ActiveRecord::Base
end
class Character < ActiveRecord::Base
  has_one :inventory
end
describe 'test' do
  it 'works' do
    puts Character.first.inventory.money.inspect
  end
end

猜测什么可能被打破:

  • money是一个复合字段之类的。您可以发布您的数据库模式吗?
  • 库文件没有正确加载。使用puts $LOADED_FEATURES来验证所有应该需要的文件是否已经存在。

最新更新