From: Yusuke ENDOH Date: 2010-01-30T20:02:55+09:00 Subject: [ruby-dev:40257] Re: ERB#src (was Re: Re: [Feature #2366] private constant 遠藤です。 2010年1月30日7:20 Masatoshi SEKI : >>>> 普通に見えるものは何でも spec にされてしまう例として、以下のような spec >>>> があります。(private constant には関係ないですが……) >>>> >>>> http://github.com/rubyspec/rubyspec/blob/master/library/erb/src_spec.rb >>>> >>>> つまり、ERB#src の返り値を固定文字列で spec にしているという。1.9 で失敗 >>>> してるんですが、どう対処したものでしょう。 > > いや、使ってほしいAPIだしテストしてくださってかまわないのですが、 純粋に公開 API なんですね。想定用途は、コンパイル結果のキャッシュ? だとしたら Proc とか返した方がよかった気もします (ERB 開発当時の Ruby の状況を知らないですが) 。 いずれにせよ公開 API なら、spec に書くのがよさそうです。それなら、 > 単純に文字列比較で検査するから問題なんですよね。たぶん。 そういう問題だと思います。ERB#src は「こういう条件下でこういう 文字列を返す関数」という仕様ではない、ということで、 > こういうテストにした方がいいよ、っていうのを教えてあげたら > よいのかな。 それがいいと思います。正確には「ERB#src はどういう仕様か」を教えて あげるといいと思います。 推察するに、「実行可能な Ruby コードの文字列を返す」というのが仕様 でしょうか。だとすれば、文字列の中身を見るのではなく、ripper で パースが通ることをみるとか、実際に eval してみるのが正しい spec の テストと言えそうです。 -- Yusuke ENDOH