1

inifile gemを使用した Serverspec テストがあります。

require 'spec_helper'
require 'inifile'

describe 'inifile test -' do
  file = '/tmp/testfile1.ini'
  file_ini = IniFile.load(file)
  it 'testfile1.ini should contain expected values' do
    expect(file_ini['section1']['variable1']).to eq('value1')
  end
end

がマシン上でローカルに実行された場合 ( gem がインストールされrakeている Ubuntu ゲストまたは OS X ホストのいずれか)、テストに合格します。inifile

ただし、rakeVagrant box に対して実行すると (つまり、SSH で Vagrant 上の Ubuntu に接続しているホスト上で)、次のメッセージが表示されて失敗します。

1) inifile test - testfile1.ini should contain expected values
   On host `molecule-test'
   Failure/Error: expect(file_ini['section1']['variable1']).to eq('value1')
   NoMethodError:
     undefined method `[]' for nil:NilClass

   # ./spec/inifile_spec.rb:8:in `block (2 levels) in <top (required)>'

Serverspec のデフォルトRakefilespec_helper.rb.

/tmp/testfile1.ini内容に関係なくテストは失敗しますが、次のとおりです。

[section1]
variable1=value1

エスケープされていない文字に何らかの問題があるように思えますが、よくわかりません。

何が間違っている可能性がありますか?

4

2 に答える 2

1

が Vagrant インスタンスにインストールされていることを確認した後inifile、これを行うかなり洗練されていない方法は次のようになります。

describe 'inifile test -' do
  file_ini = command("ruby -rinifile -e \"print IniFile.load('/tmp/testfile1.ini')['section1']['variable1']\"").stdout
  it 'testfile1.ini should contain expected values' do
    expect(file_ini).to eq('value1')
  end
end

file変数スコープがそのメソッド内で機能するかどうかわからないのでcommand、安全にプレイしました。

Asker techraf は、inifileAPI について十分な知識を持っているため、このよりクリーンなルートを追加します。

describe 'inifile test -' do
  file_ini = IniFile.new(content: command("cat /tmp/testfile1.ini").stdout)
  it 'testfile1.ini should contain expected values' do
    expect(file_ini['section1']['variable1']).to eq('value1')
  end
end

いくつかのコラボレーションにより、この最適なソリューションにたどり着きました。

describe 'inifile test -' do
  file_ini = IniFile.new(content: file('/tmp/testfile1.ini').content)
  it 'testfile1.ini should contain expected values' do
    expect(file_ini['section1']['variable1']).to eq('value1')
  end
end
于 2016-06-20T12:11:14.553 に答える