2016-12-28 1 views
0
begin 
    require "bundler/inline" 
rescue LoadError => e 
    $stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler" 
    raise e 
end 

gemfile(true) do 
    source "https://rubygems.org" 
    gem "rails", github: "rails/rails" 
    gem "sqlite3" 
end 

require "active_record" 
require "minitest/autorun" 
require "logger" 

# This connection will do for database-independent bug reports. 
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:") 
ActiveRecord::Base.logger = Logger.new(STDOUT) 

ActiveRecord::Schema.define do 
    create_table :posts, force: true do |t| 
    end 

    create_table :comments, force: true do |t| 
    t.integer :post_id 
    end 
end 

class Post < ActiveRecord::Base 
end 

class Comment < ActiveRecord::Base 
    belongs_to :post 
end 

class BugTest < ActiveSupport::TestCase 
    def test_association_stuff 
    post = Post.create! 

    comment = Comment.create 
    assert_not_empty comment.errors.full_messages 
    end 
end 

이 테스트는 현재 레일 마스터에서 실패합니다. 는 나는 5레일 5 belongs_to 기본 동작

이 예상되는 동작인가 레일에서 기본적으로 요구 belongs_to 때문에 성공해야한다고 생각?

+0

#create를 사용하기 때문에 테스트가 성공해야한다는 내 기대가 잘못되었습니다! #create 대신. – yskkin

답변

3

belongs_to레일 5에 기본적으로 필요합니다. 귀하의 예에서는 레일 5 앱을 실행하지 않으므로 ActiveRecord을 사용하고 있습니다.

# Require `belongs_to` associations by default. Previous versions had false. 
Rails.application.config.active_record.belongs_to_required_by_default = true 

는 당신이, 당신의 예에서와 비슷한 결과를 달성하기 : 새 레일 5 응용 프로그램을 생성 할 때, 당신은 다음 줄을 가진 파일 config/initializers/new_framework_defaults.rb를 얻을 수 있기 때문에

belongs_to는 레일 (5)에서 기본적으로 필요합니다 뿐만 아니라 ActiveRecord이 구성 옵션을 설정 (기본적으로는이 nil, 일명 falsy 값의 의미, 설정되지 않은 것) :

# This connection will do for database-independent bug reports. 
ActiveRecord::Base.establish_connection(adapter: "sqlite3", database: ":memory:") 
ActiveRecord::Base.logger = Logger.new(STDOUT) 
ActiveRecord::Base.belongs_to_required_by_default = true # <-- This line :) 

을 이제 테스트를 실행하는 경우, 그들은 전달합니다.

자세한 내용은 this pull request을 참조하십시오.