Rails3 - Mocking файловой системы с помощью RSpec - PullRequest
1 голос
/ 29 марта 2011

Я только что закончил учебник Rails3Tutorial, и я пробую свой первый реальный dev rails.(Чувствуется, что едешь один в первый раз сразу после прохождения теста - страшно).

Во всяком случае, вот моя проблема.Я хотел бы перечислить содержимое каталога на веб-странице.Достаточно просто, но у меня есть несколько вопросов.Я использую RSpec кстати

Во-первых, как мне протестировать решение для вождения?Мне нужно смоделировать файловую систему, чтобы я мог диктовать результаты Dir.entries (или аналогичные) для контрольного примера.Я знаю, что могу написать содержимое каталога в блоке before (: each), а затем очистить после теста, но это выглядит неуклюже.Я знаю, как создать заглушку для объектов Dir и как форсировать результаты, но как мне вставить этот заглушенный объект в контроллер.Я хочу использовать макетируемый объект во время тестирования и реальную вещь для производства.Как мне это сделать?

Во-вторых, куда я должен поместить код, который проверяет файловую систему.Я не использую базу данных для этого, так как собираю информацию, просматривая каталог.Так должна ли вообще быть модель?Или я должен сделать тяжелую работу в контроллере?

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

1 Ответ

2 голосов
/ 29 марта 2011

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

В вашем конкретном случае класс Dir - это то, что обрабатывает файлы внутрикаталог.Весь код, который заботится о том, как хранятся ваши «вещи», должен быть в моделях.

Это даст вам массив путей к файлам в этом каталоге

Dir.new("your_file_path").entries

Если вы хотите заглушить эти, вы будете делать что-то вроде

directory = Dir.new("/") #obviously using *nix here
directory.stub!(:entries).and_return(["fakefile.txt"])
puts directory.entries
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...