Как я могу смоделировать / подделать существование файла с помощью rspec? - PullRequest
7 голосов
/ 10 февраля 2010

Вот что у меня есть:

it "should be able to get a valid directory path" do  
   @asset.some_file_path.should == "/something/test.jpg"
end

Проблема в том, что some_file_path возвращает "/not_here_yet.jpg", если не существует никакого файла.

def some_file_path
  if File.exists(self.my_image_path)
    return my_image_path
  else
    return "/not_here_yet.jpg
  end
end

Я не хочу создавать новый файл в моих тестах. Есть ли способ для меня подделать существование файла?

Я думаю что-то вроде:

it "should be able to get a valid directory path" do  
   AwesomeFakeFileCreator.create(@asset.my_image_path)
   @asset.some_file_path.should == "/something/test.jpg"
end

Возможно ли это? Как я могу сделать такую ​​вещь?

Редактировать: Я немного посмотрел на FakeFS , но я не уверен, что он отвечает на мой вопрос

Ответы [ 3 ]

6 голосов
/ 10 февраля 2010

Вы могли бы что-то сделать по линиям

it "should be able to get a valid directory path" do  
  File.stub!(:exists?).and_return(true)
  @asset.stub!(:my_image_path).and_return("/something/test.jpg")
  @asset.some_file_path.should == "/something/test.jpg"
end
0 голосов
/ 10 февраля 2010

Может быть, вы можете подделать с правильным путем вашего файла. Подделка для каждого файла, который вы хотите вернуть путь

  it "should be able to get a valid directory path" do  
    File.stub!(:exists?).with("my_image_path.jpg").and_return("my_image_path.jpg")
    @asset.some_file_path.should == "my_image_path.jpg"
  end
0 голосов
/ 10 февраля 2010

Это, вероятно, крайне бесполезный ответ, поскольку я сам только начинаю разбираться с автоматизированным тестированием, но:

Насколько я понимаю, вам нужно протестировать только два условия: файл существует, а файл не существует?

Тестирование несуществования достаточно просто: создайте Актив с my_image_path, который не существует, и проверьте, что функция возвращает '/not_here_yet.jpg'.

Конечно, вы можете проверить другой случай таким же образом? создать пустой файл с расширением .jpg, затем актив, который указывает на него, и проверить, что функция возвращает правильное имя?

...