2016/7/23 追記
spec.add_test_dependency 'mruby-io'
というように記述することで、可能になってます。
背景
mrubyで画像処理を行うmruby-mrmagickを作っていて、
画像処理結果のテストをそろそろせねばという事になり、
手っ取り早いのはImageMagickのconvertコマンドなどを動かして
出来た画像と比較すればいいのでは、と考えた。
困ったこと
mrubyは必要なmrbgemsをコンパイルしてmrubyにまとめて、これを使うことにより、
様々な拡張機能を利用できた。
当然、テストの際もこれらの拡張機能が利用できるものと考えていたが、
テストの際はmrubyコマンドが使われることは無いようで、テスト用にはそれぞれのmrbgemsの内部?の機能のみが使用出来る状態のmrubyが動くような感じだった。
解決方法
mrbgemsの依存関係の指定がmrbgem.rakeファイルにて記述出来るので、こちらに
spec.add_dependency 'mruby-io'
を追加した。ビルドの依存関係としては、依存しないのが気になるところであるが、
ありがたいことに
と、呟いたところ、早速mrbtestって、テスト対象のmrbgemsしかうごかせ無いのかなぁ、バッククォート、使ってimagemagick動かせず、mruby-ioでIO#popenに変えても、IOなんて定数知らないと怒られてる
— kjunichi (@kjunichi) 2015, 5月 15
というヒントを頂いたものの、現状の自分のruby力(rakeコマンドはCRubyで動いている理解)では、ハードルが高かったので、 当面このやり方でテストを進めようと思う。@kjunichi test_dependenciesを上書きしたら、なんとかなるかもしれません
— take-cheeze (@take_cheeze) 2015, 5月 15
もっと良いやり方あったら是非教えてください。
外部コマンドを使ってテストコード
assert("Mrmagick::Image#scale") do
`convert -size 640x480 -background "#C0C0C0" -fill "#FFFF00" caption:"ABC" output.png`
Mrmagick::ImageList.new("output.png").scale(0.5).write("t.png")
`convert -scale 50% output.png dest.png`
`composite -compose difference dest.png t.png diff.png`
t= `identify -format "%[mean]" diff.png`
assert_equal("0",t)
end