Каталог тестирования существует с Rspec

Я тестирую 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.

Ответ 1

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

Будет работать как для файлов, так и для папок.

Ответ 2

Если вы хотите узнать, является ли файл каталогом, вы можете использовать функцию File.directory?.

Ответ 3

Исследование этого сам, и вот что я нашел:

File.directory?("#{Rails.root}/public/pdf").should be true

Ответ 4

Путь также оказывается достаточно читаемым для такого рода вещей.

require 'pathname'

# ...

expect(Pathname.new('file.txt')).to exist
expect(Pathname.new('file.txt')).to be_file
expect(Pathname.new('dir')).to be_directory

Ответ 5

 expect(File.directory?("#{Rails.root}/public/pdf")).to be true

Ответ 6

Я предпочитаю делать что-то вроде этого:

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)

это также будет работать для каталогов

Ответ 7

Поместите это определение сопряжения где-нибудь подходящим:

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