RSpecなどでテストデータとしてymlを使う場合多いっすよね。
なんですが、たまにテストコード書いてると、ymlで読み込んだデータがシンボルで表現されずにテストケースがfailしてしまうことがありますよね。
まぁ、symbolize_keysとか使えばいいんですけど、めんどくさいのでymlをloadしたときからシンボルにできないんか?と。
結果、できました。
なので、ymlでシンボルを表現するやり方を書いておきます。
とりあえず、以下のymlを用意しました。
test/fixtures/files/hoge.yml
user:
id: 1
name: ほげ太郎
kana_name: ホゲタロウ
nick_name: ほげほげ
まずは、こいつをコンソールから読み込んでみます。
[4] pry(main)> h = YAML.load_file("test/fixtures/files/hoge.yml")
=> {"user"=>{"id"=>1, "name"=>"ほげ太郎", "kana_name"=>"ホゲタロウ", "nick_name"=>"ほげほげ"}}
で、例えばnameがほしかったら
[6] pry(main)> h['user']['name']
=> "ほげ太郎"
こう表現するんですけど、シンボルで欲しい!!
h[:user][:name]と。
どうするかというと、ymlをこう書き換えます。
test/fixtures/files/hoge.yml
:user:
:id: 1
:name: ほげ太郎
:kana_name: ホゲタロウ
:nick_name: ほげほげ
:を追加!!
それで、ymlをloadしてみると。
[8] pry(main)> h = YAML.load_file("test/fixtures/files/hoge.yml")
=> {:user=>{:id=>1, :name=>"ほげ太郎", :kana_name=>"ホゲタロウ", :nick_name=>"ほげほげ"}}
[10] pry(main)> h[:user][:name]
=> "ほげ太郎"
シンボルでnameを取得できました!!!
やったね!!
おわり