2012-12-03 8 views
1

안녕하세요, 테스트를 배우려고하고 있지만 내 단위 테스트가 작동하지 않습니다. 그래서 (뿐만 아니라 다른 모델하지만, 아직 테스트를 시작하지 않은) 사용자 모델을 가지고 :레일 : 간단한 단위 테스트가 터미널에서 실행되지 않습니다.

class Users < ActiveRecord::Base 
    attr_accessible :age, :gender, :name 

    has_many :sent_messages, :class => "Messages", :foreign_key => 'sender_id' 
    has_many :received_messages, :class => "Messages", :foreign_key => 'receiver_id' 

    belongs_to :location 
    belongs_to :language 

    before_save { |user| if user.new_record? then create_remember_token end } 


    private 

     def create_remember_token 
      self.remember_token = SecureRandom.urlsafe_base64 
     end 

end 

및 테스트/단위/users_test.rb

require 'test_helper' 

class UsersTest < ActiveSupport::TestCase 
    test "user is created" do 
    user = User.create!(:name => "Edmund") 
    assert_equal user, User.first 
    end 
end 

하지만 실행할 때 rake test:units 내가 얻을 :

Edmunds-MacBook-Pro:langexchange edmundmai$ rake test:units 
NOTICE: CREATE TABLE will create implicit sequence "languages_id_seq" for serial column "languages.id" 
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "languages_pkey" for table "languages" 
NOTICE: CREATE TABLE will create implicit sequence "locations_id_seq" for serial column "locations.id" 
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "locations_pkey" for table "locations" 
NOTICE: CREATE TABLE will create implicit sequence "messages_id_seq" for serial column "messages.id" 
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "messages_pkey" for table "messages" 
NOTICE: CREATE TABLE will create implicit sequence "users_id_seq" for serial column "users.id" 
NOTICE: CREATE TABLE/PRIMARY KEY will create implicit index "users_pkey" for table "users" 
/Users/edmundmai/.rvm/gems/[email protected]/gems/activesupport-3.2.8/lib/active_support/core_ext/hash/keys.rb:51:in `block in assert_valid_keys': Unknown key: class (ArgumentError) 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/activesupport-3.2.8/lib/active_support/core_ext/hash/keys.rb:50:in `each_key' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/activesupport-3.2.8/lib/active_support/core_ext/hash/keys.rb:50:in `assert_valid_keys' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/activerecord-3.2.8/lib/active_record/associations/builder/association.rb:33:in `validate_options' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/activerecord-3.2.8/lib/active_record/associations/builder/association.rb:24:in `build' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/activerecord-3.2.8/lib/active_record/autosave_association.rb:139:in `build' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/activerecord-3.2.8/lib/active_record/associations/builder/belongs_to.rb:14:in `build' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/activerecord-3.2.8/lib/active_record/associations/builder/association.rb:12:in `build' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/activerecord-3.2.8/lib/active_record/associations.rb:1428:in `belongs_to' 
    from /Users/edmundmai/Desktop/Class/Ruby/langexchange/app/models/messages.rb:4:in `<class:Messages>' 
    from /Users/edmundmai/Desktop/Class/Ruby/langexchange/app/models/messages.rb:1:in `<top (required)>' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:251:in `require' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:251:in `block in require' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:236:in `load_dependency' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:251:in `require' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:359:in `require_or_load' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:313:in `depend_on' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/activesupport-3.2.8/lib/active_support/dependencies.rb:225:in `require_dependency' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/railties-3.2.8/lib/rails/engine.rb:439:in `block (2 levels) in eager_load!' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/railties-3.2.8/lib/rails/engine.rb:438:in `each' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/railties-3.2.8/lib/rails/engine.rb:438:in `block in eager_load!' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/railties-3.2.8/lib/rails/engine.rb:436:in `each' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/railties-3.2.8/lib/rails/engine.rb:436:in `eager_load!' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/railties-3.2.8/lib/rails/application/finisher.rb:53:in `block in <module:Finisher>' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/railties-3.2.8/lib/rails/initializable.rb:30:in `instance_exec' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/railties-3.2.8/lib/rails/initializable.rb:30:in `run' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/railties-3.2.8/lib/rails/initializable.rb:55:in `block in run_initializers' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/railties-3.2.8/lib/rails/initializable.rb:54:in `each' 
    from /Users/edmundmai/.rvm/gems/[email protected]al2ndEd/gems/railties-3.2.8/lib/rails/initializable.rb:54:in `run_initializers' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/railties-3.2.8/lib/rails/application.rb:136:in `initialize!' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/railties-3.2.8/lib/rails/railtie/configurable.rb:30:in `method_missing' 
    from /Users/edmundmai/Desktop/Class/Ruby/langexchange/config/environment.rb:5:in `<top (required)>' 
    from /Users/edmundmai/Desktop/Class/Ruby/langexchange/test/test_helper.rb:2:in `require' 
    from /Users/edmundmai/Desktop/Class/Ruby/langexchange/test/test_helper.rb:2:in `<top (required)>' 
    from /Users/edmundmai/Desktop/Class/Ruby/langexchange/test/unit/helpers/home_helper_test.rb:1:in `require' 
    from /Users/edmundmai/Desktop/Class/Ruby/langexchange/test/unit/helpers/home_helper_test.rb:1:in `<top (required)>' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/rake-10.0.2/lib/rake/rake_test_loader.rb:10:in `require' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/rake-10.0.2/lib/rake/rake_test_loader.rb:10:in `block (2 levels) in <main>' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/rake-10.0.2/lib/rake/rake_test_loader.rb:9:in `each' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/rake-10.0.2/lib/rake/rake_test_loader.rb:9:in `block in <main>' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/rake-10.0.2/lib/rake/rake_test_loader.rb:4:in `select' 
    from /Users/edmundmai/.rvm/gems/[email protected]/gems/rake-10.0.2/lib/rake/rake_test_loader.rb:4:in `<main>' 
rake aborted! 
Command failed with status (1): [ruby -I"lib:test" -I"/Users/edmundmai/.rvm/gems/[email protected]/gems/rake-10.0.2/lib" "/Users/edmundmai/.rvm/gems/[email protected]/gems/rake-10.0.2/lib/rake/rake_test_loader.rb" "test/unit/**/*_test.rb" ] 
Tasks: TOP => test:units 
(See full trace by running task with --trace) 

방법이 가능하다? 누군가 도울 수 있습니까? 나는 그것이

UPDATE 메시지 모델 광포 무슨 방법을 모른다 그래서 다른 테스트를 작성하지 않은 : 그 스택 추적에서

class Messages < ActiveRecord::Base 
    attr_accessible :content, :read 

    belongs_to :sender, :class => "User", :foreign_key => 'sender_id' 
    belongs_to :receiver, :class => "User", :foreign_key => 'receiver_id' 
end 
+0

당신은'갈퀴 DB를 실행 했 : 테스트 : prepare'를? –

+0

안녕하세요. 아니, 나는 그것을 본 적이 없다. 테스트를 실행하기 전에 실행해야하는 표준 명령입니까? – Edmund

+0

실행하면 위의 create 테이블에'주의 사항 :'이 표시됩니다. 그 후 다시 'rake test : units'을 실행했고 아무것도 바뀌지 않았습니다. 오류는 여전히 동일합니다 – Edmund

답변

5

당신은 당신이 사용되어야한다

has_many :sent_messages, :class => "Messages", :foreign_key => 'sender_id' 
has_many :received_messages, :class => "Messages", :foreign_key => 'receiver_id' 

를 사용 :class 옵션 원하는 것은 :class_name 옵션입니다. (혹시이 사용 모델을 변경해야합니다.)

http://guides.rubyonrails.org/association_basics.html#has_many-association-reference

+0

감사합니다! ': class'를': class_name'으로 바꾸면'User'와'Message' 모델을 모두 고칠 수 있습니다. 감사!! – Edmund

0

을, 당신은 당신의 Messages 모델의 오류를 가지고있는 것 같습니다. 이 오류를 수정하면 올바르게 실행되어야합니다. 협회에서


에는 같은 건 없다

has_many :sent_messages, :class_name => "Messages", :foreign_key => 'sender_id' 
has_many :received_messages, :class_name => "Messages", :foreign_key => 'receiver_id' 

(:class_name:class 전환) : 사용자 모델에서

+0

안녕하세요, 베라, "메시지"라고 생각하는 데 도움이되는 라인을 알려주시겠습니까? – Edmund

+0

내 메시지 모델을 살펴 보았는데 (질문에 붙여 넣었습니다.) 내 메시지 모델을 잘못 보았습니다 ... – Edmund

+0

'from/Users/edmundmai/Desktop/Class/Ruby/langexchange/app/models/messages .rb : 4 :' ''다음과 같은 오류가 있습니다 : 알 수없는 키 : class (ArgumentError) – Magicmarkker

관련 문제