Im Anschluss mit Ben Walker (erstaunlich) Let's Build Instagram With Rails, speziell die BDD-Version. Tutorial verwendet FactoryGirl. Ich erhalte die folgende Fehlermeldung mit einer Reihe von Tests:Factory Girl/Rspec - "Trait Nicht Registriert" Fehler
Kurzfassung
Failure/Error: post = create(:post, user_id = user.id)<br>
ArgumentError:<br>
Trait not registered: 1
Ich kann nicht Ben bekommen sogar den Fehler mit einem clone of my repo neu, und ich finde nichts die Stack Overflow- "Trait nicht registriert" -Fragen.
Dies ist meine erste SO-Frage, also, wenn ich etwas falsch mache auf , dass Front, lass es mich wissen. Vielen Dank im Voraus für die Hilfe!
-Code Auswahl:
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 '[email protected]'
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
Full Error (einer von vielen)
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)>'
Danke, Sie haben mir geholfen, das Problem zu lösen. Seltsamerweise habe ich immer noch Fehler ('Fehler/Fehler: post = create (: post, Benutzer: Benutzer) NoMethodError: undefined Methode 'to_sym' für # ') es auf Ihre Weise zu tun, aber die Verbindung loszuwerden (da die Assoziation der gleiche Name wie die Fabrik ist, pro den Link, den Sie mir gaben), löste das Problem. Ich muss weiter graben, während es funktioniert, ich mag es nicht zu wissen, warum. ABER DANKE. –
Ja, richtig. Wenn die Zuordnung denselben Namen wie die Factory hat, müssen Sie das Schlüsselwort 'association 'nicht verwenden. Aber ich dachte, das würde immer noch funktionieren und ich habe es dort benutzt, um dir zu zeigen, dass das die Assoziation ist. Aber ich habe es nicht getestet, bevor ich hier gepostet habe. Gut, dass du es gedacht hast :) +1 –