Ruby - 有没有办法覆盖__FILE__变量?

时间:2010-03-16 19:02:30

标签: ruby global-variables

我正在进行一些单元测试,并且一些代码正在使用 FILE 变量检查基于当前执行脚本的相对路径是否存在文件。我正在做这样的事情:

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

我正试图找到一种方法让它在单元测试中失败而不做任何激烈的事情。能够覆盖__ FILE __变量是最容易的,但据我所知,这是不可能的。

任何提示?

3 个答案:

答案 0 :(得分:3)

我的提示?重构!

答案 1 :(得分: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 __))解决了与它不同的东西最初是。

答案 2 :(得分:1)

编程Ruby 1.9在第330页上说__FILE__是只读的。它还将其描述为“执行环境变量”。

但是,您可以在instance_eval中define __FILE__。我认为这对你的问题没有帮助。