RSpecでRubyの標準入出力をテストするにはどうすればいいのでしょうか?

テスト対象は以下のようなコードです。

class Sample

  def run
    puts 'Please input your name'

    while input = STDIN.gets.chomp
      break if input == "exit"
      puts "Your name is #{input}"
      puts 'Please input your name'
    end
  end
end

Sample.new.run

実行すると名前入力を受け付けて、入力があれば名前を表示し、また名前受付に戻る処理をループで繰り返します。exitで処理を抜けます。

$ ruby test.rb
Please input your name
Taro
Your name is Taro
Please input your name
Jiro
Your name is Jiro
Please input your name
exit

このRSpecテストコードを書いているのですが無限ループに入ってしまって、どうしてもできません。

describe Sample do
  describe 'run' do

    let(:sample) { Sample.new }

    it 'puts your name' do
      allow(STDIN).to receive(:gets) { 'Takashi' }
      expect(STDOUT).to receive(:puts).with('Please input your name')
      sample.run
    end
  end
end

やりたいテストはTakashiと入れた場合はYour name is Takashiと出たら成功。
exitと入れた場合は処理を抜ける、のテストです。

どのようにすればいいのでしょうか?