3

実際のファイル システムを偽のファイル システムに偽装するコードが必要です。そのため、起動すると に変換/home/user/Documents/fake_fsされる/ため、すべてのDirorFile呼び出しはそのディレクトリに移動します。例:

にファイルを作成したい/some_fileので、次を使用します。

File.open('/some_file', 'w') do |f|
  f.puts 'something on this file'
end

/home/user/Documents/fake_fs/some_fileそして、代わりにそれを書くでしょう/some_file。これを行う方法はありますか?ありがとう!

4

1 に答える 1

2

次の 2 つのオプションがあります。

オプション 1 - ジェムを使用して偽造する

FakeFSは、一部のファイル システム操作が機能しないという注意事項がありますが、希望どおりに機能します。FakeFS は、Ruby 標準 lib のさまざまなファイル操作呼び出しを書き換えるため、何かが見落とされたり、何かが正しく機能しない可能性があります。

オプション 2 - コードを作り直してテストしやすくする

基本的/に、アプリがファイルの検索を開始するルートとしてハードコーディングしています。これを構成可能にすると、コードでテスト用にこれを操作できます。

例えば:

$root = ENV['ROOT_DIR'] || '/'
File.open(File.join($root,'some_file'),'w') do |file|
  # whatever
end

テストは、ROOT_DIR必要に応じて設定した場所に設定できます。

chrootこれを行うのにも役立つかもしれません。

Dir.chroot(ENV['ROOT_DIR'] || '/')

File.open('/some_file','w') do |file|
  # whatever
end

詳細については、を参照してくださいman chroot

個人的には、オプション 2 を使用します。

于 2012-04-23T18:44:58.297 に答える