5

rspec を使用してファイル入力をモックする方法について質問があります。クラスの次のコードがありますが、ファイル入力をモックする理由が正確にはわかりません。filepath/path/to/the/file

私はGoogleで検索を行い、通常はモックではなく実際のファイルをロードしていることが判明しましたが、実際にはモックだけで実際のファイルを使用していないのとは逆です。

module Service
  class Signing
    def initialize(filepath)
      @config = YAML.load_file(filepath)
      raise "Missing config file." if @config.nil?
    end

    def sign()      …
    end

    private
    def which()     …
    end

  end 
end

このファイル入力のモックに EOF 区切り文字を使用することは可能ですか?

file =  <<EOF
A_NAME: ABC
A_ALIAS: my_alias
EOF
4

2 に答える 2

4

次のように、テキストからスタブ化しYAML.load_fileて解析済みの YAML を返すことができます。

yaml_text = <<-EOF
  A_NAME: ABC
  A_ALIAS: my_alias
EOF
yaml = YAML.load(yaml_text)
filepath = "bogus_filename.yml"
YAML.stub(:load_file).with(filepath).and_return(yaml)

これは、ファイルの読み込み自体を完全にスタブ化するわけではありませんが、そのためには、YAML.load_file が裏で何をしているのかを推測する必要があり、それは良い考えではありません。YAML 実装は既にテスト済みであると想定しても安全なので、上記のコードを使用して、呼び出し全体をテキストから解析されたフィクスチャに置き換えることができます。

正しいファイル名が に渡されることをテストする場合はload_file、スタブを期待値に置き換えます。

YAML.should_receive(:load_file).with(filepath).and_return(yaml)
于 2013-01-23T21:48:49.143 に答える