くりにっき

フルスタックキュアエンジニアです

rspec-temp_dir をリリースしました

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

aroundDir.mktmpdir をいい感じに組み合わせることが出来たと思います(熱い自画自賛)