2011-01-31 14 views
0

クリップクリップの画像アップロードをシミュレートする2つのキュウリのシナリオがあります。シナリオが完了したら、これらのフォルダをもう一度削除します。 :URL =>キュウリシナリオ後のフォルダを削除する

私は、次の添付ファイルのフォルダ構造持つ "/システム/:添付ファイル/:listing_id /:ID /:STYLE_:ファイル名"

ペーパークリップが自動的にを削除します。id /: style_:ファイル名フォルダで、親フォルダではありません。

私はリスティングが削除されたときにリスティングIDの画像フォルダを削除するのに効果的な私のリスティングコントローラ(1リスティングは多くの画像があります)に次のようなことがあります。私はステップが実行された後、Cucumberで同じものをシミュレートする必要があります。

def destroy 
    @listing = Listing.find(params[:id]) 

    # if destroy was a success, remove the listing image folder 
    if @listing.destroy 


    end 

    require 'fileutils' 
    dir = Rails.root + '/system/photos/' + @listing.id.to_s() 
    FileUtils.rm_rf(dir) 


    respond_to do |format| 
     format.html { redirect_to(listings_url) } 
     format.xml { head :ok } 
    end 
end 

I)を削除するには、キュウリを言うことができる :シナリオを実行しているか、b)の最終段階としてリストを削除するには、キュウリを伝えた後listing_idフォルダ名を?

私はキュウリenv.rbファイルにこれを追加しようとしました:

AfterStep('@paperclip') do 
     # This will only run before steps within scenarios tagged 
     # with @cucumis AND @sativus. 
     # delete folders that were created with paperclip during the test 
     require 'fileutils' 
     #@listing.id = 55 
     #dir = Rails.root + '/system/photos/' + @listing.id.to_s() 
     dir = Rails.root + '/system/photos/55' # NOT WORKING 
     FileUtils.rm_rf(dir) 
    end 

しかし、それは、1)私はそのシナリオからの@ listing.idを取得する方法がわからないので、問題が発生し、 2)私がハードコーディングしても(上のように)、それはそれを取り除かない。

どのような考えですか?

答えて

0

すでに少し古いが、私はちょうど同じ問題で走ったとして、自分がここで私がやったことです:

dir = Rails.root + 'images/' 
dir.rmtree if dir.directory? 

# or the short form, if you know the directory will be there 
(Rails.root + 'images/').rmtree 

だから私はこの問題は、フォルダの初めに、あなたの「/」だったと思います。少なくとも私にとっては、そのスラッシュではうまくいきませんでした。

0

私はコメントを残しましたが、そうするにはポイントがありません。

これはうまくいかない理由はありません。 FileUtils.rm_rf(dir)が実際にテスト環境のディレクトリを削除していることを確認しましたか?

これは 'script/console test'でテストできます。

0

あなたが好きなフォルダを削除するには、キュウバーのat_exitにフックすることができます。私はfeatures/support/uploads_cleaner.rbの添付コードを使用しています。

# Removes uploaded files when all scenarios for the current test process 
# are finished. Ready for parallel_tests, too. 

require 'fileutils' 

at_exit do 
    directory_name = "#{ Rails.env }#{ ENV['TEST_ENV_NUMBER'] }" 
    uploads_path = Rails.root.join('public/system', directory_name) 
    FileUtils.remove_dir(uploads_path) if uploads_path.directory? 
end 

これは、makandra Cardから転載しました。

関連する問題