Following along with Ben Walker (surprisingly) Let Build Instagram With Rails , specifically the BDD version. The tutorial uses FactoryGirl. I get the following error on a series of tests:
Short version
Failure/Error: post = create( :post, user_id = user.id )<br> ArgumentError:<br> Trait not registered: 1
I can’t get Ben to even recreate the error with the clone of my repo , and I don’t find anything in the overflow of the stack to “not register” issues.
This is my first SO question, so if I am doing something wrong on this front, please let me know. Thank you in advance!
Code Selection:
specifications /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
specifications / 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
application / 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
application / 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
application / 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
Complete mistake (one of many)
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)>'