Techioz Blog

erb を含む YAML が解析されない

概要

この yaml ファイルが解析されないのはなぜですか?

---
<% sensor_types = YAML.load_file('db/seed-fixtures/sensor_type.yml') %>
<% sensor_types.each do |sensor_type| %>
sensor<%= sensor_type['id'] %>:
  id: <%= sensor_type['id'] %>
  title: <%= sensor_type['title'] %>
  unit: "<%= sensor_type['unit'] %>"
  valid_min: <%= sensor_type['valid_min'] %>
  valid_max: <%= sensor_type['valid_max'] %>
  codename: <%= sensor_type['codename'] %>
  scale_base_ten_exponent: <%= sensor_type['scale_base_ten_exponent'] %>
<% end %>

このファイルはテストのフィクスチャに使用され、rspec によってフィクスチャ ディレクトリからロードされます。

試してみると、「このコンテキストの行 4 列 28 ではマッピング値は許可されていません (Psych::SyntaxError)」というメッセージが表示されます。

解決策

基本的な YAML ファイルのように、ERB を含む YAML ファイルをロードすることはできません。この投稿をチェックしてください。

代わりにできることは次のとおりです (仕様初期化子または before フックで)。

FIXTURE_CONFIG = YAML.load(ERB.new(File.read("#{Rails.root}/path_to_your_file.yml.erb")).result)

そして、この変数をテストで使用します。