minitestからRSpecへテストコードを変換した


まとめ

https://github.com/kinushu/minitest_to_rspec

使って

mt2rspec --rails source_file [target_file]

実行。

ただ手作業での変換もどうしても必要です。


やったこと

minitestでテスト書かれていたプロジェクト、RSpecの仕組み使いたいところもでてきたため、

えいやっとRSpecに変更しようと思い、

他にやっている人おられるか探してみたけどそんなに情報がなさそう…

GitHub を漁ると、おお

https://github.com/jaredbeck/minitest_to_rspec

いいではないですか。(もうメンテされてなさそうだけど、しょうがない)

# test/**/*_test.rb 

# それぞれに
mt2rspec --rails source_file [target_file]
# を適用していきます。

日本語がUTF-8のコードポイントのテキストになってしまう現象あったため、

UTF8_SYMBOL = 'utf-8'.freeze

UTF8_CODEPOINT_REG = /\\u([0-9a-fA-F]{4})/i
UTF8_CODEPOINT_REG2 = %r<\\u{([0-9a-fA-F]{4})}>

def convert_utf_codep_to_original_text(tgt_s)
reg = UTF8_CODEPOINT_REG
res = tgt_s.gsub(reg) { |s| s.match(reg)[1].to_i(16).chr(UTF8_SYMBOL) }

reg = UTF8_CODEPOINT_REG2
res = res.gsub(reg) { |s| s.match(reg)[1].to_i(16).chr(UTF8_SYMBOL) }

return res
end

な感じで変換していく。

また、matcherが対応していないもので、対応できそうなところはforkして対応してみました。

https://github.com/kinushu/minitest_to_rspec

assert_not, assert_not_nil の対応を追記しました。

でも自動変換できないところはまだあるので、もう手動で書き換えしました。