在我的 Rails 7 應用程式中,我進行了 Capybara 測驗,它檢查下載 PDF 檔案是否有效。問題是,檢查成功后,Capybara 將這個檔案保存在專案的主路徑中。如何在測驗后立即洗掉此檔案?
it 'download invoice' do
payment = build :isor_payment, :with_pdf
stub_payment(payment)
login_as user
visit payment_path(payment.platform_payment_id)
click_on 'Download'
expect(page).to have_content I18n.t('payments.main_data_component.invoice_pdf')
end
在那次測驗之后,它會為我保存一個名為payment-43523452.pdf.
uj5u.com熱心網友回復:
我假設您使用 Rspec 作為您的測驗運行程式。您可以配置after(:each)回呼以洗掉檔案:
RSpec.configure do |config|
# all the rspec configuration options...
config.after(:each) do
FileUtils.rm('payment-43523452.pdf')
end
end
但這有點脆弱,每當您的下載檔案名更改時,您都必須更改配置。我更喜歡在 tmp/ 下創建一個下載目錄,比如 tmp/test_downloads/,然后使用上面的回呼方法將 tmp/test_downloads/ 目錄下的所有檔案洗掉。
在Capybara驅動配置中配置下載檔案目錄,一般在spec_helper.rb中。我的驅動程式配置如下所示:
Capybara.register_driver :headless_chrome do |app|
chrome_options = Selenium::WebDriver::Chrome::Options.new
chrome_options.add_argument('--headless')
chrome_options.add_argument('--window-size=1400,800')
chrome_options.add_preference(:download,
directory_upgrade: true,
prompt_for_download: false,
default_directory: 'tmp/test_downloads/'
)
chrome_options.add_preference(:plugins, always_open_pdf_externally: true)
driver = Capybara::Selenium::Driver.new(app, :browser => :chrome, :capabilities => [chrome_options])
driver
end
然后你的 RSpec after(:each) 回呼將是:
FileUtils.rm_rf(Dir.glob("tmp/test_downloads/*"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/510048.html
標籤:轨道上的红宝石红宝石水豚
