>

저는 새로운 코더이므로 아마도 어리석은 일입니다. 아래 코드는 테스트 스위트에서 실패하지만 레일 콘솔에서 동일한 단계를 실행하면 예상 결과가 나타납니다.

aura_test.rb

require 'test_helper'
class AuraTest < ActiveSupport::TestCase
  def setup
    @champion = champions(:aura)
    @aura = Aura.new description: "Lorem ipsum Aura blah", champion_id: @champion.id, stat_type_id: 1
  end
  test "should be valid" do
    assert @aura.valid?
  end
end

aura.rb

class Aura < ApplicationRecord
  belongs_to :champion, optional: true
  belongs_to :stat_type
  belongs_to :affinity, optional: true
  belongs_to :location_group, optional: true
  validates :description, presence: true
  validates :champion_id, presence: true
end

champions.rb

class Champion < ApplicationRecord
  belongs_to :faction
  belongs_to :affinity
  belongs_to :rarity
  belongs_to :champion_type
  has_one :aura, dependent: :destroy
  validates :name, presence: true
end

비품 : champions.yml

 name: AuraChamp
  faction: one
  affinity: one
  rarity: one
  champion_type: one

레일 콘솔에서 비슷한 코드를 실행할 때 :

>> @champion = Champion.first
  Champion Load (0.1ms)  SELECT  "champions".* FROM "champions" ORDER BY "champions"."id" ASC LIMIT ?  [["LIMIT", 1]]
=> #<Champion id: 1, name: "", faction_id: 1, affinity_id: 1, rarity_id: 1, champion_type_id: 1, created_at: "2019-07-19 23:50:18", updated_at: "2019-07-19 23:50:18">
>> @aura = Aura.new description: "Lorem ipsum Aura blah", champion_id: @champion.id, stat_type_id: 1
=> #<Aura id: nil, name: nil, description: "Lorem ipsum Aura blah", champion_id: 1, stat_type_id: 1, affinity_id: nil, location_group_id: nil, increase: nil, is_percent: nil, created_at: nil, updated_at: nil>
>> @aura.valid?
  StatType Load (0.1ms)  SELECT  "stat_types".* FROM "stat_types" WHERE "stat_types"."id" = ? LIMIT ?  [["id", 1], ["LIMIT", 1]]
=> true

테스트 실행시 다음 결과가 나타납니다

FAIL["test_should_be_valid", AuraTest, 0.5133701380000275]
 test_should_be_valid#AuraTest (0.51s)
        Expected false to be truthy.
        test/models/aura_test.rb:11:in `block in <class:AuraTest>'

  • 답변 # 1

    모델에서 :

    class Aura < ApplicationRecord
      belongs_to :champion, optional: true
      belongs_to :stat_type
      belongs_to :affinity, optional: true
      belongs_to :location_group, optional: true
      validates :description, presence: true
      validates :champion_id, presence: true  //<= Notice  this validation here
    end
    
    

    champion_id 에 대한 유효성 검사가 있습니다  이는 귀하가 champion_id 에 값을 제공 할 때까지 귀하의 기록이 유효하지 않음을 의미합니다

    이제 비품을보고 :

    name: AuraChamp
      faction: one
      affinity: one
      rarity: one
      champion_type: one
    
    

    id 가 없습니다  당신이 @champion.id 로 여기에 액세스  

    def setup
        @champion = champions(:aura)
        @aura = Aura.new description: "Lorem ipsum Aura blah", champion_id: @champion.id, stat_type_id: 1
    end
    
    

    와이즈 비즈

    다음과 같이 조명기를 바꾸어보십시오 :

    Your rails console steps are passing because when record is saved to database it automatically gets a unique id

    name: AuraChamp id: 1 faction: one affinity: one rarity: one champion_type: one

관련 자료

  • 이전 벡터 ++에 큰 txt 파일을로드하는 C ++ 빠른 방법
  • 다음 python - 특정 창에서 텍스트를 읽으려면 어떻게해야합니까?