1

エピソード番号を決定するコンストラクターで文字列を取得し、対応するエピソード番号でエピソードの字幕ファイルを検索し、エピソードの字幕名を設定する rspec my class Episode でテストしたいと思います。

私が直面している問題は、実際のファイルでも偽のファイルの作成でもテストしたくないということです (すでに実行しており、正常に動作しています)。

Dir.glob への呼び出しをスタブする必要があると思いますが、これまでのところ運が悪かったです。

何か案は ?

class Episode
  attr_reader :avi_file, :subtitle_name, :number, :name, :directory

  # an episode is instantiated with an avi filename
  def initialize(avi)
    @name = File.basename(avi, ".avi")
    @directory = File.dirname(avi)
    # Looking for an episode number in the form of 
    # s01e01 or 01x01
    match_data = @name.match /(s\d{2,}e\d{2,}|\d{2,}x\d{2,})/i
    @number = match_data.to_s
    find_subtitle_in
    puts self.subtitle_name
  end



  private

  def find_subtitle_in
    srt_files = Dir.glob("#{@directory}/*.srt")
    @subtitle_name = srt_files.find { |e| /#{@number}/i =~ e }
  end

end

仕様

 it "does find a subtitle" do
    episode = Episode.new "Friends s01e01.avi"
    Dir.stub!(:glob){["Friends.s02e01 subtitle french.srt", "Friends.s01e01 subtitle french.srt" ]}
    episode.subtitle_name.should == "Friends.s01e01 subtitle french.srt"
  end

rspec の出力

1) エピソードで字幕が見つかりません 失敗/エラー: episode.subtitle_name.should == "Friends.s01e01 subtitle french.srt" expected: "Friends.s01e01 subtitle french.srt" got: nil (using ==) # ./spec /lib/episode_spec.rb:25:in `ブロック (2 レベル) in '

4

1 に答える 1

3

これを試して:

it "does find a subtitle" do
    Dir.stub!(:glob){["Friends.s02e01 subtitle french.srt", "Friends.s01e01 subtitle french.srt" ]}
    episode = Episode.new "Friends s01e01.avi"
    episode.subtitle_name.should == "Friends.s01e01 subtitle french.srt"
end
于 2012-07-05T21:57:59.633 に答える