発生した問題
Railsのシステムスペックでファイルダウンロードの機能をテストしようとしたが、日本語を含むファイル名だとファイル名がなぜか "download" になってしまう。
# 期待するpath
/path/to/downloaded_files/ほげほげ.txt
# 実際のpath
/path/to/downloaded_files/download
以下は失敗するテストコード(ヘッドレスChromeを利用するシステムスペック)の例。
click_link 'ダウンロード'
# wait_and_find_download_file は自作のヘルパーメソッド、という想定
download_path = wait_and_find_download_file
expect(download_path).to end_with "ほげほげ.txt"
#=> Failure/Error: expect(download_path).to end_with "ほげほげ.txt"
#=> expected `"/path/to/downloaded_files/download".end_with?("ほげほげ.txt")` to be truthy, got false
とくに、ローカル環境ではパスするのに、CI環境(GitHub Actionsなど)でテストが落ちてしまう。
一方、ファイル名をアルファベットのみにするとテストは問題なくパスする("abc.txt"など)。
対処法
ロケールの設定を日本にする。たとえばGitHub Actions(Ubuntu環境)でテストが落ちる場合、以下のような設定を追加する。
steps:
# ...
- name: Set Locale
run: |
sudo locale-gen ja_JP.UTF-8
sudo update-locale LANG=ja_JP.UTF-8