LoginSignup
0

More than 5 years have passed since last update.

【Ruby on Rails】RSpecで使うymlで直接シンボルを表現したかったこの頃

Posted at

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を取得できました!!!

やったね!!

おわり

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0