Rubyで(Railsではなく),ちょっとしたCGIスクリプトのはずが,いろいろトラブルが起こって,Test::Unitを使ってテストしていくことにしました.
なのですが,さて,CGIの入力を与えるのはどうすればいいのか…
何も考えずにテストすると,CGI.newのたびに「(offline mode: enter name=value pairs on standard input)」が出て入力待ちになります.オフラインモードってやつですね.
cgi.rbを読みますかね.ファイルを開き,「offline」で検索すると,こんなコードを見つけました.
# offline mode. read name=value pairs on standard input. def read_from_cmdline require "shellwords" string = unless ARGV.empty? ARGV.join(' ') else if STDIN.tty? STDERR.print( %|(offline mode: enter name=value pairs on standard input)\n| ) end readlines.join(' ').gsub(/\n/n, '') end.gsub(/\\=/n, '%3D').gsub(/\\&/n, '%26') (以下略)
なんだ,あらかじめARGVに値を入れておけばいいのか!
それではと,CGI.newの前に
ARGV = ["abc=001&def=002"]
を書いて動かすと,「dynamic constant assignment」というエラーが出ます.ARGVは,組み込み定数ですね.
ちょっと考えて,
ARGV.replace(["abc=001&def=002"])
ならどうか…うまくいきました.
「&」を使わず,
ARGV.replace(%w(abc=001 def=002))
というのでもOKでした*1.