1. ホーム
  2. ruby-on-rails

[解決済み] railsでファイルアップロードをテストするには?

2022-10-19 12:40:51

質問

JSONファイルを受け取り、そのJSONファイルを処理して、アプリケーションのユーザーメンテナンスを行う役割を持つコントローラがあります。ユーザーテストでは、ファイルのアップロードと処理は動作しますが、もちろん、テストでは、ユーザーメンテナンスのプロセスを自動化したいと思います。機能テストフレームワークでファイルをコントローラにアップロードするにはどうしたらよいでしょうか?

どのように解決するのですか?

この質問を検索しても、Stack Overflowでその質問、またはその答えを見つけることができませんでしたが、他の場所で見つけたので、SOで利用できるようにお願いしています。

railsフレームワークには、関数 fixture_file_upload ( Rails 2 レイルズ 3 , Rails 5 ) を追加すると、フィクスチャディレクトリから指定されたファイルを探し出し、機能テストでコントローラのテストファイルとして利用できるようになります。使うには

1) テストでアップロードするファイルを fixtures/files サブディレクトリに置いてください。

2) ユニットテストの中で fixture_file_upload('path','mime-type') を呼び出すことで、テスト用のファイルを取得することができます。

bulk_json = fixture_file_upload('files/bulk_bookmark.json','application/json')

3) アップロードのパラメータとしてfixture_file_uploadによって返されたオブジェクトを渡して、欲しいコントローラアクションを打つためにpostメソッドを呼び出します。

post :bookmark, :bulkfile => bulk_json

あるいは、Rails 5では post :bookmark, params: {bulkfile: bulk_json}

これは、fixturesディレクトリにあるファイルのTempfileコピーを使用してシミュレーションされたポストプロセスを実行し、その後ユニットテストに戻るので、ポストの結果の検証を開始することができます。