Я воспользовался советом Брайана Джона по всем его пунктам, но подумал, что выложу некоторый код из моего решения на тот случай, если кто-то еще захочет сделать что-то подобное. Я также добавил проверку для пользовательского тега метаданных, так что я делаю это только когда помечаю тестовую группу символом : file
spec_helper.rb
Обратите внимание, что ниже я создаю резервную копию моего каталога #{Rails.root}public/system/ENV/files
(где ENV = "test" или "development"), потому что я использую его для тестирования функциональности скрепки, и именно там хранятся мои файлы.
Кроме того, вместо того, чтобы просто выполнить rm -r
для структуры каталогов, я восстанавливаю команду --delete
rysnc из моего файла резервной копии, которая удалит все файлы, созданные в ходе теста.
RSpec.configure do |config|
# So we can tag tests with our own symbols, like we can do for ':js'
# to signal that we should backup and restore the filesystem before
config.treat_symbols_as_metadata_keys_with_true_values = true
config.before(:each) do
# If the example group has been tagged with the :file symbol then we'll backup
# the /public/system/ENV directory so we can roll it back after the test is over
if example.metadata[:file]
`rsync -a #{Rails.root}/public/system/#{Rails.env}/files/ #{Rails.root}/public/system/#{Rails.env}/files.back`
end
end
config.after(:each) do
# If the example group has been tagged with the file symbol then we'll revert
# the /public/system/ENV directory to the backup file we created before the test
if example.metadata[:file]
`rsync -a --delete #{Rails.root}/public/system/#{Rails.env}/files.back/ #{Rails.root}/public/system/#{Rails.env}/files/`
end
end
end
sample_spec.rb
Обратите внимание, что я пометил , что «он должен создать новый файл» с символом : file
require 'spec_helper'
describe "Lesson Player", :js => true do
it "should create a new file", :file do
# Do something that creates a new file
...
end
end