복붙노트

[RUBY-ON-RAILS] 어떻게해야합니까 사용 공장 소녀는 종이 클립 첨부 파일을 생성?

RUBY-ON-RAILS

어떻게해야합니까 사용 공장 소녀는 종이 클립 첨부 파일을 생성?

나는 이미지 데이터를 축약 버전은 아래의 표시라는 종이 클립 첨부 파일 필드가 많은 이미지가 모델 사람을 가지고 :

class Person
  has_many :images
  ...
end

class Image
  has_attached_file :data
  belongs_to :person
  ...
end

사람은 적어도 하나 개의 이미지가 첨부가 필요합니다.

FactoryGirl를 사용하면, 다음과 같은 유사 코드가 있습니다 :

Factory.define :image do |a|
  a.data { File.new(File.join(Rails.root, 'features', 'support', 'file.png')) }
  a.association :person
end

Factory.define :person do |p|
  p.first_name 'Keyzer'
  p.last_name 'Soze'
  p.after_create do |person|
    person.assets = [Factory.build(:image, :person => person)]
  end
  # p.images {|images| [images.association(:image)]}
end

(N.B. 또한 위의 주석 코드도 시도되었다 시도) 나는 오이 기능을 실행하는 대부분의 시간, 나는 다음과 유사한 오류가 발생합니다 :

때로는 테스트가 성공적으로 실행합니다.

사람이 문제가 내가 여기 가지고 또는 어떻게 내가 달성하기 위해 노력하고 어떤 식으로 뭔가를 달성하기 위해 FactoryGirl과 함께 종이 클립을 사용하고 무엇인지 말씀해 주시겠습니까?

나는 레일 (3)을 사용하고 있습니다.

해결법

  1. ==============================

    1.당신은 fixture_file_upload을 사용할 수 있습니다

    당신은 fixture_file_upload을 사용할 수 있습니다

    테스트 도우미에 ActionDispatch :: TestProcess을 포함, 여기에 예를 들어 공장이다 :

    include ActionDispatch::TestProcess
    
    FactoryBot.define do
      factory :user do
        avatar { fixture_file_upload(Rails.root.join('spec', 'photos', 'test.png'), 'image/png') }
      end
    end
    

    위의 예에서, 스펙 / 사진 / test.png 요구 테스트를 실행하기 전에 응용 프로그램의 루트 디렉토리에 존재합니다.

    참고, 그 FactoryBot는 FactoryGirl의 새 이름입니다.

  2. ==============================

    2.최근 FG 구문없이 필요한 포함

    최근 FG 구문없이 필요한 포함

    factory :user do
      avatar { File.new(Rails.root.join('app', 'assets', 'images', 'rails.png')) }
    end
    

    또는 더 나은 아직,

    factory :user do
      avatar { File.new("#{Rails.root}/spec/support/fixtures/image.jpg") } 
    end
    
  3. ==============================

    3.이상 중추 연구소에서 데스몬드 보웨 때문에 메모리 누수 문제 fixture_file_upload을 피하는 제안합니다. 대신, 당신은 당신의 공장에서 직접 클립 필드를 설정해야합니다 :

    이상 중추 연구소에서 데스몬드 보웨 때문에 메모리 누수 문제 fixture_file_upload을 피하는 제안합니다. 대신, 당신은 당신의 공장에서 직접 클립 필드를 설정해야합니다 :

    factory :attachment do
      supporting_documentation_file_name { 'test.pdf' }
      supporting_documentation_content_type { 'application/pdf' }
      supporting_documentation_file_size { 1024 }
      # ...
    end
    
  4. ==============================

    4.나는 아래 요지의 코드를 사용하고있다 :

    나는 아래 요지의 코드를 사용하고있다 :

    2 레일

    http://gist.github.com/162881

    3 레일

    https://gist.github.com/313121

  5. ==============================

    5.

    file { File.new(Rails.root.join('spec', 'fixtures', 'filename.png')) }
    
  6. ==============================

    6.ActionController :: TestUploadedFile를 사용해보십시오. 당신은 알아서해야 TestUploadedFile 및 클립의 인스턴스에 파일 속성을 설정할 수 있습니다. 예를 들면

    ActionController :: TestUploadedFile를 사용해보십시오. 당신은 알아서해야 TestUploadedFile 및 클립의 인스턴스에 파일 속성을 설정할 수 있습니다. 예를 들면

    valid_file = File.new(File.join(Rails.root, 'features', 'support', 'file.png'))  
    p.images { 
       [
         ActionController::TestUploadedFile.new(valid_file, Mime::Type.new('application/png'))
       ] 
    }
    
  7. ==============================

    7.어떤 경우에는 위의 답변이 도움이 될 수 있습니다, 그리고 하나 실제로 내 상황 중 하나에 도움이되지만 Carrierwave를 사용하는 경우는,이 ​​질문에서 이전 솔루션이 시간을 작동하지 않았다.

    어떤 경우에는 위의 답변이 도움이 될 수 있습니다, 그리고 하나 실제로 내 상황 중 하나에 도움이되지만 Carrierwave를 사용하는 경우는,이 ​​질문에서 이전 솔루션이 시간을 작동하지 않았다.

    첫 번째 방법 :

    이런 식으로 나를 위해 문제를 해결 만들 : 후 나이를 추가하는 경우 :

    after :create do |b|
      b.update_column(:video_file, File.join(Rails.root, 'spec', 'fixtures', 'sample.mp4'))
    end
    

    video_file 같은 인라인 비디오 파일 {File.new ( "# {Rails.root} /spec/fixtures/sample.mp4을")} 설정 작동하지 않았고 그것은 오류를보고했습니다.

    두 번째 방법 :

    (personal_file 첨부 파일 이름 변경)이 같은 공장을 정의합니다 :

    FactoryGirl.define do
      factory :contact do
        personal_file { File.new("#{Rails.root}/spec/fixtures/personal_files/my_test_file.csv") }
        personal_file_content_type 'text/csv'
    
      end
    end
    

    그리고 설정 / 환경 / test.rb에 다음 줄을 추가합니다 :

    config.paperclip_defaults = {
      url: "#{Rails.root}/spec/fixtures/:attachment/:filename",
      use_timestamp: false
    }
    
  8. ==============================

    8.정확히 무엇을 테스트? 그 클립 성공적으로 파일을 첨부 할 것인가? 그건 정말 클립이 응용 프로그램을 처리 할 것을 시험처럼 보인다.

    정확히 무엇을 테스트? 그 클립 성공적으로 파일을 첨부 할 것인가? 그건 정말 클립이 응용 프로그램을 처리 할 것을 시험처럼 보인다.

    당신은 시도 해 봤나

    a.data { File.join(Rails.root, 'features', 'support', 'file.png') }
    

    우리는 대신 factory_girl의 기계공을 사용하고 같은 단지 사용되는 일이

    Image.blueprint do
      image { RAILS_ROOT + 'spec/fixtures/images/001.jpg' }
    end
    

    비록, 우리는 정말 우리가이 작업을 수행 할 때, 우리는 일반적으로 단지 유효한 이미지 오브젝트를 갖고 싶어 많은 테스트를하지 않습니다.

  9. from https://stackoverflow.com/questions/3294824/how-do-i-use-factory-girl-to-generate-a-paperclip-attachment by cc-by-sa and MIT license