はじめに
Minitest実行時にrequireを使用してファイルを分割するという超基本的な部分でLoadErrorが出てしまい先に進めないという状況が続きました。
原因解明に無駄な時間を要してしまったので共有しておきます。
LoadErrorの文面は以下の通りです。
[Running] ruby "/Users/username/Documents/Practice/ test/fizz_buzz_test.rb"
/System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- ../lib/fizz_buzz (LoadError)
from /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/2.3.0/rubygems/core_ext/kernel_require.rb:55:in `require'
from /Users/username/Documents/Practice/ test/fizz_buzz_test.rb:3:in `<main>'
仕様
RGB変換プログラム作成しました。
ファイルの階層と作成したファイルは以下のとおりです。
Practice/
├ lib/
│ └ rgb.rb
└ test/
└ rgb_test.rb
def to_hex(r,g,b)
[r,g,b].inject('#')do|hex,n|
hex + n.to_s(16).rjust(2,"0")
end
end
require 'minitest/autorun'
require './lib/rgb'
class RgbTest < Minitest::Test
def test_to_hex
assert_equal '#000000',to_hex(0,0,0)
assert_equal '#ffffff',to_hex(255,255,255)
end
end
こちらのrgb_test.rbを実行したところLoadErrorとなりました。
ちなみにファイルを分割せずにMinitestを行なうと正常に作動します。
作成したFileには問題はなさそうです。
原因はフォルダ名にあり
何度も確認しましたが、パスが間違っている感じではない。
Ruby最新版をインストールしてみるも変化無し。。
それでもエラー文を細かく凝視し、見てみると最初の1行に気になる点が、、
ruby "/Users/jibiki/Documents/Practice/ test/fizz_buzz_test.rb"
フォルダ名「/ test/」の部分に謎の空白!
確認してみると、わかりづらいですが確かにフォルダ名の先頭にスペースがありました。
修正したところ無事解決しました。
まとめ
大したことではないただのミスではあるが、こういった個人的なミスは検索しても同じ体験をしている人が出て来にくいため解明に時間を割いてしまいました。
以前に別のファイルでMinitestを実行したところ、LoadErrorで上手く読み込めていなかったことがあったので、そちらのフォルダ名も確認したところ先頭に空白が入っていました。
Macの仕様か、VisualStadioCodeの仕様が原因か分かりませんが、慣れていないとフォルダ作成時に空白が開いてしまう事があるみたいなので注意が必要です。