Ruby - есть ли способ перезаписать переменную __FILE__? - PullRequest
1 голос
/ 16 марта 2010

Я выполняю некоторое модульное тестирование, и часть кода проверяет, существуют ли файлы на основе относительного пути выполняемого в данный момент сценария, используя переменную FILE . Я делаю что-то вроде этого:

if File.directory?(File.join(File.dirname(__FILE__),'..','..','directory'))
    blah blah blah ...
else
    raise "Can't find directory"
end

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

Любые советы?

Ответы [ 3 ]

3 голосов
/ 16 марта 2010

Мой совет? Рефакторинг!

1 голос
/ 23 июня 2011

Программирование Ruby 1.9 сообщает на странице 330, что __FILE__ только для чтения. Он также описывает его как «переменную среды выполнения».

Однако вы можете определить __FILE__ в instance_eval. Я не думаю, что это поможет с вашей проблемой.

1 голос
/ 16 марта 2010

Я не пометил это как реальный ответ, так как рефакторинг был бы лучшим способом сделать это. Тем не менее, я получил его на работу:

wd = Dir.getwd
# moves us up two directories, also assuming Dir.getwd
# returns a path of the form /folder/folder2/folder3/folder4...
Dir.chdir(wd.scan(/\/.*?(?=[\/]|$)/)[0..-3].join)
...run tests...
Dir.chdir(wd)

Я пытался сделать это, используя Dir.chdir ('../../'), но когда я вернулся обратно, File.expand_path (File.dirname (__ FILE __)) разрешил что-то другое был изначально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...