2016-06-12 9 views
0

は、私はRailsの上FactoryGirlで奇妙な問題/エラーが生じています:FactoryGirl Railsの引数エラー

ArgumentError: wrong number of arguments (given 1, expected 0) 
    /Users/bintoy/ruby-apps/tradegecko-exercise/exercise-app/spec/factories/object_records.rb:3:in `object_id' 

注:これは、このから重複問題ではありません。Why am I getting FactoryGirl wrong number of arguments error? - また、私はすでにのような可能な解決策の多くを試してみましたFactoryGirlsとSpringの問題を手動で読み込んだり、気付いたりします。しかし、誰も働いていませんでした。

アプリ/モデル/ object_record.rb

class ObjectRecord 
    include Mongoid::Document 

    validates_presence_of :object_id, :object_type, :timestamp, :object_changes 
    validates_uniqueness_of :timestamp, :scope => [:object_id, :object_type] 

    field :object_id, type: Integer 
    field :object_type, type: String 
    field :timestamp, type: DateTime 
    field :object_changes, type: Hash 

end 

スペック/機能/ user_searches_spec.rb:

セットアップは、データベースがMongoDBの(Mongoidマッパー)に基づいており、ここに関与しているファイルされていることです

require 'spec_helper' 
require 'rails_helper' 

    feature 'User searches on table' do 
     before :each do 
     FactoryGirl.create(:object_record) 
     end 

     scenario 'with an object id', js: true do 
     input_a_search '1' 

     expect(page).to have_css(".sorting_1", :text => "1") 
     save_and_open_screenshot 

     end 

     def input_a_search(search_word) 
     visit object_records_index_path 
     find('input[type=search]').set(search_word) 
     end 
    end 

スペック/工場/ object_records.rb

FactoryGirl.define do 
    factory :obect_record do 
     object_id 1 
     object_type "ObjectA" 
     timestamp 1465748715 
     object_changes ({:property1 => "val1"}) 
    end 
end 

仕様/サポート/ factory_girl.rb

RSpec.configure do |config| 
     config.include FactoryGirl::Syntax::Methods 
    end 

スペック/ spec_helper.rb

RSpec.configure do |config| 

    config.after(:all) do 
    DatabaseCleaner.clean_with(:truncation) 
    end 

    config.before(:suite) do 
    FactoryGirl.reload 
    end 


    config.expect_with :rspec do |expectations| 

    expectations.include_chain_clauses_in_custom_matcher_descriptions = true 
    end 

    config.mock_with :rspec do |mocks| 

    mocks.verify_partial_doubles = true 
    end 

end 

スペック/ rails_helper.rb

ENV['RAILS_ENV'] ||= 'test' 
require File.expand_path('../../config/environment', __FILE__) 

abort("The Rails environment is running in production mode!") if Rails.env.production? 
require 'spec_helper' 
require 'rspec/rails' 

require 'capybara/rspec' 
require 'capybara/rails' 

require 'capybara/poltergeist' 
Capybara.javascript_driver = :poltergeist 

require 'factory_girl_rails' 


Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f } 

RSpec.configure do |config| 
    config.include Capybara::DSL 

    config.infer_spec_type_from_file_location! 

    config.filter_rails_from_backtrace! 

end 

EDIT:ちょうどランダムのうち しようこれをデバッグするために、私は工場でobject_idの引数を省略して何が起こるかを見てみました:

FactoryGirl.define do 
    factory :obect_record do 
     object_id 
... 

しかし、その代わりに、私はRSpecのから、この失敗/エラーメッセージが表示されました:

1) User searches on table with an object id 
    Failure/Error: FactoryGirl.create(:object_record) 

    ArgumentError: 
     Factory not registered: object_record 
    # ./spec/features/user_searches_spec.rb:8:in `block (2 levels) in <top (required)>' 

答えて

1

ありルビーの既存object_id方法:あなたの工場は、そのメソッドを呼び出すのではなく、中にmethod_missingコードに通って落ちるさ属性を作成する工場の女の子。

方法欠けているフックがちょうど便利で、あなたはまた、

add_attribute :object_id, 1 

を呼び出して直接属性を追加することができ、あなたの工場の定義は、タイプミス(obect_record)を持っているように見えます。

object_idはコアルビメソッドなので、その名前を使用した結果、他の問題に遭遇することは不可能ではありません。

+0

おい、あなたロック!ありがとう!私はこれを取らないだろう。すべての入力を使用して問題を解決しました。 – Raven