woshidan's loose leaf

ぼんやり勉強しています

RSpecでテストデータ用にファイルを読み込む

RSpecでテスト用のファイルを読み込む

RSpecでテスト用のファイルを読み込む際はデフォルトでは spec/fixtures/files にファイルを置いて

file_fixture("example.txt").read

とすると、ファイルの中身がspec中で呼び出せる。

ファイル中にHTMLやJSONのレスポンスを入れておいてHTTPリクエストをモックしたい場合などに使える。

既にfixturesに他にファイルがあってそれらに合わせてファイルの場所を既定のパスから変更したい場合は

RSpec.configure do |config|
  config.file_fixture_path = "spec/custom_directory"
end

で可能となる。

RSpecでファイルをアップロードする

テストデータでファイルを使いたい状況としては、HTTPリクエストのモック以外にもファイルのアップロードのテストなどがある。 その場合は fixture_file_upload を以下のように使う。

post :change_avatar, avatar: fixture_file_upload('files/spongebob.png', 'image/png')

このメソッドで使うファイルのパスは config.file_fixture_path ではなく、config.fixture_path で指定するので注意。

参考

relishapp.com apidock.com qiita.com