如何生成用于单元测试的临时文件?

How to generate a temporary file for use in a unit test?

测试方法允许向用户添加的包含数据的其他文件添加 path

例如,用户可能在 /workspace/data 目录中存储了一个名为 data.txt 的文件。我们想将这个目录的路径添加到一个已经存在的名为 DATA_PATH.

的数组中

方法:

def add_custom_path(path)
  DATA_PATH.unshift(path)
end

其中 path 是 Rails 应用程序中用户存储文件的位置。

gem使用test-unit

问题:

有没有办法在某个目录下临时生成一个文件,运行一个assert_not_empty测试,然后让这个文件消失?

我没有为 gem 编写测试的经验,因此非常感谢任何指导。

The .create and .new methods of Ruby's Tempfile take a second argument which is the directory you want the file to be inTempfile 创建的文件在临时文件的 File 对象被垃圾回收或 Ruby 退出时自动删除。所以你可以创建一个临时文件,

tempfile = Tempfile.new('filename', 'directoryname')

写入它,进行测试,让 Ruby 为您清理它。

请注意,第一个参数不是文件的完整非限定名称,而是 Tempfile 添加了消除歧义字符的部分,因此您可以安全地在测试套件中多次执行此操作。

此外,如果您需要文件具有特定的后缀,您可以这样做,例如

tempfile = Tempfile.new(['filename', '.rb'], 'directoryname')