2010-03-16 3 views
1

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

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

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

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

ответ

3

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

+0

Хахаха, да, я думал об этом. Я надеялся, что там где-то есть какой-то маленький рубиновый драгоценный камень (ни один каламбур не предназначен, и нет, а не рубигем) :) –

+0

@Markus Orreley: Рад, что вы это делаете легкомысленно. Я ненавижу это, когда низкоуровневый код сам принимает решения для себя. Единичный тест - отличный повод исправить это. – 2010-03-16 20:28:59

+0

Я понял, как это сделать, но я думаю, что ваш ответ - настоящий ответ. Я оставлю это ниже как еще один возможный ответ, хотя –

1

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

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 __)) разрешено к чему-то другому, чем это было изначально.

1

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

Тем не менее, вы можете define__FILE__ в пределах instance_eval. Я не думаю, что это помогло бы с вашей проблемой.

Смежные вопросы