2013-10-06 3 views
2

에서 파일 업로드를 테스트하는 방법은 fixture_file_upload입니다. 문제는 데이터베이스를 청소 한 후에 업로드 된 모든 파일이 Cloudinary에 남아 있다는 것입니다.rspec/cucumber를 실행 한 후 clouddy 파일 업로드를 정리할 위치

레이크 작업을 사용하여 Cloudinary::Api.delete_resources을 사용했지만이를 제거하기 전에 즉각적인 정리가 필요합니다. DatabaseCleaner은 관련된 모든 공개 ID를 제거합니다.

Cloudinary에서이 파일을 제거하려면 어디에서 DatabaseCleaner을 (를) 방해해야합니까?

답변

2

@ phoet의 입력을 기반으로 한 cloudinary가 하루에 할 수있는 API 호출의 양과 한 번의 호출로 정리할 수있는 이미지의 양을 제한한다는 사실을 감안하면

클래스를 만들었습니다
class CleanupCloudinary 
    @@public_ids = [] 

    def self.add_public_ids 
    Attachinary::File.all.each do |image| 
     @@public_ids << image.public_id 

     clean if @@public_ids.count == 100 
    end 
    end 

    def self.clean 
    Cloudinary::Api.delete_resources(@@public_ids) if @@public_ids.count > 0 

    @@public_ids = [] 
    end 
end 

는 다음과 같이 내가 사용 : 내 공장 소녀 파일에, 나는 즉시 광고를 만든 후 어떤 public_ids을 추가하여 전화를 걸 : env.rb에서

after(:build, :create) do 
    CleanupCloudinary.add_public_ids 
end 

을, 나는

012 추가 3,

뿐만 아니라 spec_helper.rb에

이 테스트 동안의 결과
config.after(:suite) do 
    CleanupCloudinary.clean 
end 

는 각각 100 개 cloudinary 이미지 후 정리 및 테스트 후, 나는 attachinary를 사용하고 나머지

+0

많은 감사 @ 대니! 오늘은 진짜 너 덕분이다 – macool

1

여기에는 두 가지 방법이 있습니다.

첫 번째로, 통합 테스트가 아니면 cloudining에 업로드하지 않을 것입니다. 모의, 스텁 또는 테스트 이중 사용합니다.

둘째로, 어떤 이유로 든 파일을 정말로 정말로 업로드해야한다면, after_all 후크 테스트에서 자동 정리를 수행하는 후크를 작성할 것입니다.

+0

을 정리하는 등의 gem을 cloudinary와 결합하여 사용했고, 아직 내 모델에서 "has_attachment"지시어를 스텁하지 않는 방법을 찾지 못했습니다. 모든 테스트가 실행 된 후에 실행되는 "after_all"이 있습니까? – Danny

+0

그냥 모든 테스트 파일에 대해 그렇게하면 어떤 차이가 없어야합니다. – phoet

+0

매우 건조하지 않은가요? 그렇지? – Danny