RSpec sequence error: undefined method `primary_key' for String:Class
RSpec sequence error: undefined method `primary_key' for String:Class
这是我的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
虽然我不知道是什么起作用了。
问题是之前的 FactoryGirl
定义将空字符串分配给 Node
的 media
字段。您尚未分享您对 Node
class 的定义,但大概 media
是一个 ActiveRecord
关联。这又需要从分配给 media
的任何对象中获取主键值,以便它可以设置记录中的 media_id
字段。
这是我的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
虽然我不知道是什么起作用了。
问题是之前的 FactoryGirl
定义将空字符串分配给 Node
的 media
字段。您尚未分享您对 Node
class 的定义,但大概 media
是一个 ActiveRecord
关联。这又需要从分配给 media
的任何对象中获取主键值,以便它可以设置记录中的 media_id
字段。