LoginSignup
1
0

More than 5 years have passed since last update.

batsテストで参照渡しがうまく返ってこなかった件

Posted at

これ、すごく単純なことだけどうっかりしていたので。

テストコード

こんな感じのコードでした。

@test "For Qiita!!" {
  declare -A hash=()
  cat <<EOF > $tmp
B=245
G=2
EOF
  run File::SetToArray $tmp hash

  echo "hash: $(declare -p hash)" >&3
  [ "${hash[B]}" = "245" ]
  [ "${hash[G]}" = "2" ]
}

簡略化していますが、File::SetToHashでファイルの中身を仮想配列にしまう処理をしています。
(ファイルからkey=valueとして読み取り、それぞれキーをkeyに、値をvalueにして格納しています)

実際のコード

実行結果

ダメでした

hash: declare -A hash=()
not ok 4 For Qiita!!
# (in test file tests/libdraw.bats, line 57)
#   `[ "${hash[B]}" = "245" ]' failed with status 127

hashに値が追加されることを期待していたのですが、入らなかった

解決方法: runコマンドを外す

どうやら、File::SetToArrayの呼び出しにrunコマンドを使っていたのがよくなかった模様です。
詳しい理由は調べてませんが、おそらく別プロセスで動かしているとかそういうことなのではないかなと思っています。
多分、別プロセスというよりかサブシェルなのかな...?(サブシェル内の結果は親に継承されないため)

1
0
0

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
1
0