【发布时间】:2015-11-25 22:38:33
【问题描述】:
我正在使用 Rspec 测试文件是否已保存。我可以保证它有,就像在 Finder 等中一样,但是我的测试失败了:
it 'saved a low resolution file' do
expect(File).to exist("#{Rails.root}/public/files/low_resolution_#{id}_*")
end
我不能在那里使用通配符吗?我错过了什么?
【问题讨论】:
-
通配符不是文件...而且测试很脆弱,因为它不能保证您目标的确切文件存在。使用实际文件名进行测试怎么样?
-
简而言之,因为它很复杂。这里的通配符只会忽略文件末尾的 MD5 字符串,在这个应用程序中传输它可能比它的价值更多。
-
随着测试套件的增长,调试起来会变得很困难。 @fl00r 的解决方案有效,但测试仍然很脆弱。您可能会遇到的问题是,当您添加的测试也需要这些文件上的某些内容时。请记住,这个测试似乎有副作用(嗯,这也取决于套件的作用)。
-
作为替代方案,您可以尝试使用
allow(...).to_receive(...).and_return(...)构造来消除副作用。
标签: ruby-on-rails ruby ruby-on-rails-4 rspec