当前位置: 首页 > 面试题库 >

如何在Capybara和RSpec中测试CSV文件下载?

颛孙成益
2023-03-14
问题内容

控制器中包含以下内容:

respond_to do |format|
  format.csv  { send_data as_csv, type:'text/csv' }
end

规格:

click_link 'Download CSV'
page.driver.browser.switch_to.alert.accept

expect( page ).to have_content csv_data

但这不起作用:

Failure/Error: page.driver.browser.switch_to.alert.accept
Selenium::WebDriver::Error::NoAlertPresentError: No alert is present

我看到“保存文件”对话框,但显然不是“警告”对话框。

如何单击确定并让水豚看到数据?


问题答案:

改编自CollectiveIdea和其他来源。

在OSX上工作。Firefox 34.0.5

规格:

  describe 'Download CSV' do
    let( :submission_email ){ 'foo@example.com' }
    let( :email_csv ){ "id,email,created_at\n1,#{ submission_email }," }

    specify do
      visit '/emails'
      expect( page ).to have_content 'Email Submissions'

      click_on 'Download CSV'

      expect( DownloadHelpers::download_content ).to include email_csv
    end
  end

规范助手:

require 'shared/download_helper'

Capybara.register_driver :selenium do |app|
  profile = Selenium::WebDriver::Firefox::Profile.new
  profile['browser.download.dir'] = DownloadHelpers::PATH.to_s
  profile['browser.download.folderList'] = 2

  # Suppress "open with" dialog
  profile['browser.helperApps.neverAsk.saveToDisk'] = 'text/csv'
  Capybara::Selenium::Driver.new(app, :browser => :firefox, :profile => profile)
end

config.before( :each ) do
    DownloadHelpers::clear_downloads
end

共享/download_helper.rb:

module DownloadHelpers
  TIMEOUT = 1
  PATH    = Rails.root.join("tmp/downloads")

  extend self

  def downloads
    Dir[PATH.join("*")]
  end

  def download
    downloads.first
  end

  def download_content
    wait_for_download
    File.read(download)
  end

  def wait_for_download
    Timeout.timeout(TIMEOUT) do
      sleep 0.1 until downloaded?
    end
  end

  def downloaded?
    !downloading? && downloads.any?
  end

  def downloading?
    downloads.grep(/\.part$/).any?
  end

  def clear_downloads
    FileUtils.rm_f(downloads)
  end
end


 类似资料:
  • 我已经在我的Rails4应用程序中实现了JQuery文件上传。当我从浏览器手动测试文件上传时,文件上传工作正常,但测试失败。 下面是我上传JQuery文件的规范:需要'spec\u helper' 我使用rspec2、水豚2和恶灵来实现这个特性规范。

  • 我有一个控制器方法,它使用<code>redirect_to:back<code>将用户重定向回原始页面。方法如下所示。 我试图为有效和无效的创建方法编写一个集成测试。下面给出了集成测试。 我得到以下与。 我尝试在创建方法中使用HTTP REFERRER(如下所述)而不是redirect_to:back,但我仍然收到错误。 我不确定我需要改变什么来通过redirect_to :back的测试。我曾

  • 我创建了一个测试计划 我已经通过执行所需的步骤/过程保存了测试计划,即使用一个用户下载不同的文档。记录的脚本有1个用户,而我正在使用jmeter-n-t d:\jmeter\downloadfinal21sept.jmx-l d:\jmeter\reportlog\result21septpdfinal.csv-e-o d:\jmeter\htmlreport\report21septpdfina

  • 问题内容: 给出类似的东西: 如何测试执行时它将针对通道上收到的每条消息运行? 问题答案: 您拥有的这段代码不是很容易测试。首先,绝对要摆脱这个全局变量。相反,在构造函数中接受redis实例。 然后在测试中,您可以制作一个完全可以控制但与您使用的api一致的虚拟redis。遵循以下原则: 这种很酷的技术称为“依赖注入”(或者像某些人所说的那样,“将参数传递给构造函数”)。

  • 问题内容: 问题-设置Firefox配置文件后,Firefox在下载CSV文件时一直询问下载位置。请帮忙。 问题答案: 我看不到您的代码中的任何重大问题。但是,当你的等级不记得添加所有相关的CSV类型的文件在此提到的网站。 这是您自己的代码块,其中添加了一些简单的调整: 我已经在此站点和Microsoft 网站上验证了我的代码,并且在我看来效果很好。

  • 我正在执行包含两个线程的Jmeter性能测试。一个线程组用于数据创建,另一个线程组用于测试。在夏季结束时.csv文件给出了这两种结果。(测试创建和测试结果)。 有没有一种方法可以让我在summery.csv文件中只有测试结果(测试线程组中的结果) 我用的是jmet3.3 我已经使用设置线程组和拆除线程组来创建数据和数据清理部分。并从那些没有帮助的threads.This中删除夏季报告。