File.openを使っているメソッドのテストを書く

軽めのネタ。例えば、次のようなread_dataというメソッドがあるとします。

class MyTest
  def read_data
    File.open("hoge.txt").read
  end
end

このread_dataのテストをRSpecで書くかというお話。なんとなくhoge.txtというものは用意したくない。

StringIOを使って次のように書きました。

require "rspec"
require_relative "my_test"

describe MyTest do
  context "read_data" do
    it "return test data" do
      file = StringIO.new("aaa")
      allow(File).to receive(:open).and_return(file)
      expect(MyTest.new.read_data).to eq("aaa")
    end
  end
end

環境は

で確認。