RSpec序列错误:未定义的方法`primary_key' for String:Class

时间:2015-04-22 21:39:10

标签: ruby-on-rails ruby-on-rails-4 rspec factory-bot

这是我的spec/factories/nodes.rb

FactoryGirl.define do
  factory :node do
    sequence(:name) { |n| "Node#{n}" }
    family_tree nil
    user nil
    media ""
  end
end

这是我的node_spec.rb

require 'rails_helper'

describe Node do
  it "is valid with a name" do
    # node = Node.new(generate(:name))
    expect(build(:node)).to be_valid
  end
end

这是我得到的错误:

Failures:

  1) Node is valid with a name
     Failure/Error: expect(build(:node)).to be_valid
     NoMethodError:
       undefined method `primary_key' for String:Class

这是我的Node.rb模型的架构:

# == Schema Information
#
# Table name: nodes
#
#  id             :integer          not null, primary key
#  name           :string(255)
#  family_tree_id :integer
#  user_id        :integer
#  media_id       :integer
#  media_type     :string(255)
#  created_at     :datetime
#  updated_at     :datetime
#  circa          :datetime
#  is_comment     :boolean

  validates :name, presence: true

思想?

修改1

所以我刚刚删除了整个文件,并将其替换为现在可以正常工作:

FactoryGirl.define do
  factory :node do
    sequence(:name) { |n| "Node#{n}"  }
  end
end

我不知道什么有用。

1 个答案:

答案 0 :(得分:2)

问题是之前的FactoryGirl定义,它将空字符串分配给media的{​​{1}}字段。您还没有分享Node类的定义,但可能Nodemedia关联。这反过来需要从分配给ActiveRecord的任何对象获取主键值,以便它可以在记录中设置media字段。