【问题标题】:Error running rspec + factory_girl: undefined method 'some_factory=' for #<class instance>运行 rspec + factory_girl 时出错:#<class instance> 的未定义方法 'some_factory='
【发布时间】:2014-10-25 14:00:55
【问题描述】:

我在这里有点新手.. 我找不到 rspec 失败的明显解决方案。我正在尝试测试范围唯一性验证(请参阅下面的 character_class_spec.rb 中的测试)。我假设错误告诉我它找不到 character_class 工厂?无论如何,我正在为此努力处理数据和测试设置。输入/帮助将不胜感激。

运行“rspec 规范”时出错

1) 字符类 失败/错误:let(:char_class) { build(:character_class) } 无方法错误: '中未定义的方法character_class=' for #<CharacterClass:0x007fa1ea049dc0> # ./spec/models/character_class_spec.rb:9:inblock(2级) # ./spec/models/character_class_spec.rb:14:in `block (2 levels) in '

character_class_spec.rb

require 'spec_helper'

RSpec.describe CharacterClass, :type => :model do

  it "has a valid factory" do
    expect { Factory.build(:character_class).to be_valid }
   end

  let(:char_class) { build(:character_class) }

  it { expect(char_class).to validate_uniqueness_of(:level).scoped_to(:class_name, :character_id)}

  # it "does not allow duplication of records" do
  #   expect { FactoryGirl.create(:character_class, level: 1, class_name: "Dwarf").to be_valid }
  #   expect { FactoryGirl.create(:character_class, level: 1, class_name: "Dwarf").to be_valid }
  # end

end

character_class.rb 模型

class CharacterClass < ActiveRecord::Base
  belongs_to :character

  validates :class_name, presence: true
  validates :character_id, presence: true
  validates :level, presence: true

  validates :level, uniqueness: { :scope => [:class_name, :character_id],
                        message: "should have unique level per class name" }
end

character_class 架构定义

class CreateCharacterClasses < ActiveRecord::Migration
  def change
    create_table :character_classes do |t|
      t.string :class_name, null: false
      t.integer :level, null: false;
      t.belongs_to :character, index: true, null: false;

      t.timestamps null: false
    end
    add_index :character_classes, [:character_id, :class_name, :level], :name =>      'ind_chclass_on_ch_id_and_chname_and_level', :unique=>true
  end
end

环境

红宝石 2.1.2 轨道 4.2.0.beta2

Gemfile sn-p

group :test do
  gem 'minitest'
  gem 'faker'
  gem 'capybara'
  gem 'guard-rspec'
  gem 'launchy'
  gem 'shoulda-matchers', require: false
end

【问题讨论】:

    标签: rspec factory-bot shoulda ruby-on-rails-4.1


    【解决方案1】:

    我明白了!!!问题是我的 character_class 工厂是错误的。我使用“character_class”而不是“class_name”作为属性之一。该错误告诉我它找不到设置器“character_class=”,因为这是 CharacterClass 的无效类定义。非常感谢显示通过 rails 控制台调用 FactoryGirl 的帖子 (Single Table Inheritance with Factory Girl in Rails)!

    【讨论】:

      猜你喜欢
      • 2023-04-05
      • 1970-01-01
      • 2011-11-14
      • 1970-01-01
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多