【发布时间】: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