RSpecで一時ディレクトリを作るサンプル - くりにっき で
gem化するほどのボリュームもないのでgistで公開
と書いたものの、 rake_shared_context を見て shared_context だけのgemもありかなぁと思ってgem化してリリースしました。
使い方
specファイルで include_context "uses temp dir"
を書けばテンポラリディレクトリが作られ、temp_dir
で作ったテンポラリディレクトリの名前を取得できます。
テスト実行の度にテンポラリディレクトリは作り直されるので、テストの前後でファイル消し忘れることもないです。
サンプル
require 'rspec/temp_dir' describe "uses temp dir" do include_context "uses temp dir" it "should create temp_dir" do expect(Pathname(temp_dir)).to be_exist end it "can create file in temp_dir" do temp_file = "#{temp_dir}/temp.txt" File.open(temp_file, "w") do |f| f.write("foo") end expect(File.read(temp_file)).to eq "foo" end end
実装
たったこれだけ(ノ∀`)
https://github.com/sue445/rspec-temp_dir/blob/master/lib/rspec/temp_dir/uses_temp_dir.rb
require "tmpdir" shared_context "uses temp dir" do around do |example| Dir.mktmpdir("rspec-") do |dir| @temp_dir = dir example.run end end attr_reader :temp_dir end
around
と Dir.mktmpdir
をいい感じに組み合わせることが出来たと思います(熱い自画自賛)