Хм, может быть, у меня есть идея.
File
является частью собственно Ruby, поэтому в нем могут быть элементы, написанные на C. Некоторые инструменты метапрограммирования Ruby ломаются при работе с классами, импортированными из C, что может объяснить неспособность Rspec заставить .should
вести себя как ожидается.
Если это правда, здесь нет реального решения. Я бы предложил использовать библиотеку MockFS:
Этот недостаток MockFS - использовать его везде, где вы обычно используете File, Dir и FileUtils:
require 'mockfs'
def move_log
MockFS.file_utils.mv( '/var/log/httpd/access_log', '/home/francis/logs/' )
end
Достоинством, особенно если ваш код интенсивно использует файлы, является возможность задавать действительно сложные сценарии и запускать их, не затрагивая медленную файловую систему. Все происходит в памяти. Быстрее, более полные спецификации.
Надеюсь, это поможет, удачи!