Faker :: Файл в Rspec - PullRequest
       0

Faker :: Файл в Rspec

1 голос
/ 27 января 2020

Я написал rspe c для контроллера. И скрепка используется для загрузки файла. Я должен был написать rspe c для нумерации страниц. Для этого я хочу создать несколько записей, каждая запись должна иметь файл с расширением CSV, и каждое имя файла должно быть уникальным.

Для этого я перешел к Faker gem для создания поддельных файлов.

Я пробовал как

30.times { Post.create!(file: Rack::Test::UploadedFile.new(Faker::File.file_name(dir: Rails.root + 'spec/fixtures/file', name: "testing_file_#{rand(100)}", ext: 'csv'))) }

Но это вызовет ошибку вроде

RuntimeError: /Users/*/**/spec/fixtures/file/testing_file_28.csv file does not exist

Понятия не имею, насчет FAKER :: FILE. Есть ли способ преуспеть в этом подходе.

1 Ответ

1 голос
/ 27 января 2020
  1. Действительно ли файл testing_file_28.csv существует по этому пути? AFAIK, Faker не генерирует файлы, а просто загружает тот, который у вас есть в вашем каталоге (источник: https://github.com/faker-ruby/faker/blob/master/doc/default/file.md)

  2. Зачем вам нужно Faker за что? Будет ли

Rack::Test::UploadedFile.new("#{Rails.root}/spec/fixtures/files/testing_file_#{rand(100)}.csv", 'application/csv')

также выполнять эту работу?

рассмотрите возможность использования Rails.root.join('foo', 'bar') вместо Rails.root + "foo/bar", чтобы избежать проблем с разделителями путей (т. Е. / против \ в зависимости от вашей ОС). Если вы go с Faker и передаете разделитель вручную, рассмотрите возможность использования File::Separator из ядра Ruby, см .: https://ruby-doc.org/core-2.7.0/File.html

Поскольку это файл CSV, вы также можете написать метод, который просто генерирует случайные CSV, используя CSV.generate. В конце концов, CSV - это просто строка с , и ; / \n в качестве разделителей. Это вы можете просто передать как объект ввода-вывода в Rack::Test::UploadedFile.new, то есть вам не нужны физические файлы, вздувающие вашу папку spe c.

...