gpt4 book ai didi

ruby-on-rails - 工厂女孩/Rspec - "Trait Not Registered"错误

转载 作者:数据小太阳 更新时间:2023-10-29 06:46:50 27 4
gpt4 key购买 nike

跟随 Ben Walker 的(惊人的)Let's Build Instagram With Rails ,特别是 BDD 版本。教程使用 FactoryGirl。我在多次测试中遇到以下错误:

精简版

Failure/Error: post = create( :post, user_id = user.id )<br>
ArgumentError:<br>
Trait not registered: 1

我什至无法让 Ben 用 clone of my repo 重新创建错误,我在 Stack Overflow 的“特征未注册”问题中找不到任何内容。

这是我的第一个 SO 问题,所以如果我在那个前面做错了什么,请告诉我。在此先感谢您的帮助!

代码选择:

spec/factories.rb

FactoryGirl.define do
factory :post do
caption "nofilter"
image Rack::Test::UploadedFile.new(Rails.root + 'spec/files/images/coffee.jpg', 'image/jpg')
user_id 1
end
factory :user do
email 'fancyfrank@gmail.com'
user_name 'Arnie'
password 'illbeback'
id 1
end
end

spec/features/viewing_posts_spec.rb

require 'spec_helper'

feature 'viewing individual posts' do
background do
user = create :user
post = create( :post, user_id = user.id )

sign_in_with user
end

scenario 'can click and view a post' do
post = create(:post)

visit '/'
find(:xpath, "//a[contains(@href,'posts/2')]").click
expect(page.current_path).to eq(post_path(post))
end
end

app/models/post.rb

class Post < ActiveRecord::Base
belongs_to :user

validates :user_id, presence: true

validates :image, presence: true

has_attached_file :image, styles: { :medium => "640x" }

validates_attachment_content_type :image, :content_type => /\Aimage\/.*\Z/
end

app/models/user.rb

class User < ActiveRecord::Base
validates :user_name, presence: true, length: { minimum: 4, maximum: 16 }
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable

has_many :posts, dependent: :destroy
end

app/controllers/posts_controller.rb

class PostsController < ApplicationController
before_action :authenticate_user!

def index
@posts = Post.all
end

def new
@post = current_user.posts.build
end

def create
@post = current_user.posts.build(post_params)
if @post.save
flash[:success] = 'Your post has been created.'
redirect_to posts_path
else
flash[:alert] = 'Halt, you fiend! You need an image to post here!'
render :new
end
end

def show
@post = Post.find(params[:id])
end

def edit
@post = Post.find(params[:id])
end

def update
@post = Post.find(params[:id])
if @post.update(post_params)
flash[:success] = 'Post updated hombre.'
redirect_to root_path
else
flash[:alert] = 'Something is wrong with your form!'
redirect_to root_path
end
end

def destroy
@post = Post.find(params[:id])
@post.destroy
flash[:success] = 'Problem solved! Post deleted.'
redirect_to root_path
end

private

def post_params
params.require(:post).permit(:caption, :image)
end
end

完全错误(其中之一)

viewing individual posts can click and view a post
Failure/Error: post = create( :post, user_id = user.id )
ArgumentError:
Trait not registered: 1
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl/registry.rb:24:in `find'
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl/decorator.rb:10:in `method_missing'
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl.rb:98:in `trait_by_name'
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl/definition.rb:113:in `trait_by_name'
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl/definition.rb:109:in `block in additional_traits'
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl/definition.rb:109:in `map'
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl/definition.rb:109:in `additional_traits'
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl/definition.rb:135:in `block in aggregate_from_traits_and_self'
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl/definition.rb:128:in `tap'
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl/definition.rb:128:in `aggregate_from_traits_and_self'
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl/definition.rb:33:in `to_create'
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl/definition_hierarchy.rb:16:in `build_from_definition'
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl/factory.rb:124:in `build_hierarchy'
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl/factory.rb:87:in `compile'
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl/factory.rb:32:in `run'
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl/factory_runner.rb:23:in `block in run'
# /var/lib/gems/2.1.0/gems/activesupport-4.2.0/lib/active_support/notifications.rb:166:in `instrument'
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl/factory_runner.rb:22:in `run'
# /var/lib/gems/2.1.0/gems/factory_girl-4.5.0/lib/factory_girl/strategy_syntax_method_registrar.rb:20:in `block in define_singular_strategy_method'
# ./spec/features/viewing_posts_spec.rb:6:in `block (2 levels) in <top (required)>'

最佳答案

修改您的工厂以使用关联

FactoryGirl.define do
factory :post do
caption "nofilter"
image Rack::Test::UploadedFile.new(Rails.root + 'spec/files/images/coffee.jpg', 'image/jpg')
association user
end
factory :user do
email 'fancyfrank@gmail.com'
user_name 'Arnie'
password 'illbeback'
sequence(:id) { |id| id }
end
end

然后,创建用户并像这样发帖:

user = create :user
post = create(:post, user: user)

这应该有效。

查看更多关于 factory_girl associations 的信息.

关于ruby-on-rails - 工厂女孩/Rspec - "Trait Not Registered"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32172334/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com