Как я могу дразнить/фальсифицировать существование файла с помощью rspec?

Это - то, что я имею:

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, но я не уверен, что он отвечает на мой вопрос

7
задан marcgg 10 February 2010 в 10:53
поделиться

3 ответа

Вы можете сделать что-то вроде

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
6
ответ дан 7 December 2019 в 14:32
поделиться

Возможно, вы можете подделать правильный путь к вашему файлу. Fake для каждого файла, к которому вы хотите вернуть путь

  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
ответ дан 7 December 2019 в 14:32
поделиться

В случае отправки сообщения нескольким получателям может потребоваться избежать многократного копирования текста сообщения. Вот еще один вариант, который можно рассмотреть:

  • пользователи (user_id)

  • сообщения (message_id, sender_id, тема, body)

  • получил сообщения _ (message_id, user_id, address_mode, удален)

Эта модель может быть больше похожа на твиттер, чем на электронную почту, но может иметь некоторые преимущества.

Правила таковы:

  • Сообщение может быть отправлено только одним пользователем, указанным в sender_id каждого сообщения.
  • Каждый получатель будет определен в таблице received_messages. В поле address_mode можно определить, было ли сообщение отправлено получателю напрямую, или как CC, или, возможно, как BCC. Очевидно, что это поле является необязательным.
  • Удаленные сообщения получателями будут помечены флагом удаления в таблице received_messages.
  • Переадресованные и отвеченные сообщения должны быть воссозданы с новым sender_id. После этого текст сообщения может быть изменен.

Это некоторые из преимуществ:

  • Это занимает меньше места, чем два варианта, упомянутых в первоначальном вопросе, особенно если пользователи обычно отправляют сообщения нескольким получателям.
  • Упрощение кэширования таблицы сообщений, поскольку сообщения никогда не дублируются.
  • Получатель, удаляющий сообщение, не стирает информацию о том, что сообщение было отправлено этому пользователю. Он будет просто помечен как «удаленный» в таблице received_messages.
  • И вы также получите нормализованную модель.

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

-121--5044436-

Мы используем эту архитектуру для наших приложений обработки для обработки различий, которые требуются нашим различным клиентам. Каждая DLL имеет схожую структуру и реализует один и тот же интерфейс и метод входа «Process ()». У нас есть XML-файл, который определяет, какой класс нужно загрузить на основе клиента и существуют ли дополнительные методы, помимо процесса, который необходимо вызвать. Производительность не должна быть проблемой до тех пор, пока количество транзакций не станет очень высоким.

-121--4320970-

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

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

Тестирование отсутствия достаточно просто: создать актив с my_image_path, который не существует

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

-2
ответ дан 7 December 2019 в 14:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: