Rails3 - 使用RSpec模拟文件系统

时间:2011-03-29 16:40:34

标签: ruby-on-rails ruby-on-rails-3 mocking rspec2

我刚刚完成了Rails3Tutorial一书,我正在尝试我的第一个真实世界的rails dev。 (感觉就像是在通过测试后第一次单独驾驶 - 可怕)。

Anyhoo,这是我的问题。我想在网页上列出目录的内容。很简单,但我有几个问题。我正在使用RSpec

首先,我如何试驾解决方案?我需要模拟文件系统,以便我可以为测试用例指定Dir.entries(或类似)的结果。我知道我可以在before(:each)块中写入目录的内容,然后在测试后清理但是感觉很笨拙。我知道如何为Dir对象创建存根以及如何强制结果,但是如何将该存根对象放入控制器。我想在测试期间使用模拟对象,并在生产中使用真实的东西。我该怎么做?

其次,我应该在哪里放置检查文件系统的代码。我实际上并没有使用数据库,因为我通过查看目录来构建信息。那么应该有一个模型吗?或者我应该在控制器中进行繁重的工作?

我确信我正在盯着解决方案,但是你能给予的任何帮助都会帮助我在Rails可爱的第一步尝试。所以提前谢谢。

1 个答案:

答案 0 :(得分:2)

您的所有业务逻辑都应该在您的模型中,或者在您的库中的模块中。您的控制器应该是愚蠢的,只应将浏览器中的信息传递给您的模型,然后通过视图显示信息。

在您的特定情况下,Dir class处理目录中的文件。所有关心你的“东西”存储方式的代码都应该在模型中。

这将为您提供此目录中的文件路径数组

Dir.new("your_file_path").entries

如果您想要存根这些,您可以执行类似

的操作
directory = Dir.new("/") #obviously using *nix here
directory.stub!(:entries).and_return(["fakefile.txt"])
puts directory.entries