LoginSignup
2

More than 5 years have passed since last update.

mrubyでmrbgemのテストで外部コマンドを使うには

Last updated at Posted at 2015-05-15

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'

を追加した。ビルドの依存関係としては、依存しないのが気になるところであるが、

ありがたいことに



と、呟いたところ、早速


というヒントを頂いたものの、現状の自分のruby力(rakeコマンドはCRubyで動いている理解)では、ハードルが高かったので、
当面このやり方でテストを進めようと思う。

もっと良いやり方あったら是非教えてください。

外部コマンドを使ってテストコード

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

関連投稿

関連記事

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
2