概要

Railsのテストでは、test/fixtures内のYAMLファイルでテスト時のデータベースのデータを定義することができます。

そのYAMLファイルでは、文字列や数字などのデータを定義するのは簡単ですが、画像を定義するのはすぐにはできません。

そこで、fixtureのデータとして画像を保存する方法について説明します。

環境

  • Rails 5.1

画像データ

データベースに保存する画像のデータは、アップロードした画像のパスをデータベースに保存するというような状況を想定しています。

そのため、保存する画像のデータは文字列です。

もし、画像をバイナリとしてデータベースに保存する場合は、今回説明する方法は使えません。

画像の用意

fixtureで保存する画像は、test/fixtures/files/images/の中に保存しました。画像の名前はtest.pngです。

もし別のファイル名で保存したり別の場所に画像を置いたりしている場合は、適宜説明を読み替えてください。

保存

fixtureの中では、ERBファイルと同じようにRubyのコードを記述できるのでこのようにしています。

imageという名前のカラムに画像へのパスを保存します。

<% file_path = Rails.root.join('test', 'fixtures', 'files') %>

one:
  image: <%= file_path.join('images', 'test.png') %>

画像として文字列を保存しているので、非常に、単純にできました。

直接、画像が保存されているパスを書いてもいいですが、見通しをよくするために、Rubyのコードとして文字列を生成するようにしました。

まとめ

fixtureでの画像の保存は、文字列ということもあり簡単にできました。

気が向いたら、テストの最中に画像を保存する方法についても書きたいと思います。