17

我正在测试lib/pdf_helper.rb。所以我创建spec/lib目录。pdf_helper_spec.rb然后我在spec/lib目录中创建一个文件。当我测试那个 pdf 文件夹应该在公共文件夹中时,这是我的代码

require 'spec_helper'
require 'pdf_helper'

    describe "Pdfhelpers" do
        it "Should be in public folder" do
        file = File.new ("#{Rails.root}/public/pdf")
        if File.exist?(file) == 'true'
            puts "Success"
        else
            puts"failed"
        end


    end
  end

我对吗??我是 RSpec 的新手。

4

7 回答 7

30
expect(File).not_to exist("#{Rails.root}/public/pdf")

适用于文件和文件夹。

于 2014-05-15T16:40:22.373 回答
9

路径名也被证明对于这类事情是相当可读的。

require 'pathname'

# ...

expect(Pathname.new('file.txt')).to exist
expect(Pathname.new('file.txt')).to be_file
expect(Pathname.new('dir')).to be_directory
于 2017-02-03T03:39:05.860 回答
4

如果您想知道文件是否为目录,则可以使用该File.directory?功能。

于 2012-09-15T07:59:51.957 回答
2

我自己研究这个,这是我发现的:

File.directory?("#{Rails.root}/public/pdf").should be true
于 2014-06-23T15:31:29.567 回答
1

我更喜欢做这样的事情:

photo_path = photo.path
expect { File.open(photo_path) }.to_not raise_error(Errno::ENOENT)
photo.destroy!
expect { File.open(photo_path) }.to raise_error(Errno::ENOENT)

这也适用于目录

于 2017-06-22T20:50:53.140 回答
0
 expect(File.directory?("#{Rails.root}/public/pdf")).to be true
于 2016-07-31T06:25:09.730 回答
0

将此匹配器定义放在适当的地方:

RSpec::Matchers.define :be_a_directory do
  match do |dir_path|
    Dir.exist?(dir_path)
  end
end

之后,您将能够像这样使用它(例如):

describe "#{Rails.root}/public/pdf" do
  subject { "#{Rails.root}/public/pdf" }
  it { is_expected.to  be_a_directory }
end
于 2017-09-21T12:47:27.400 回答