【问题标题】:Rspec testing a form file uploadRspec 测试表单文件上传
【发布时间】:2014-07-17 05:05:34
【问题描述】:

我正在尝试为使用 AWS S3 的文件上传编写集成测试。我要测试的行为是用户应该单击“选择文件”按钮,然后选择一个视频,然后用户应该看到视频并且视频计数应该增加 1。我我在这里绊倒了起跑门,甚至似乎无法让用户单击按钮。我正在使用s3 direct upload gem,而我用于表单的 javascript 是

<script id="template-upload" type="text/x-tmpl">

我的输出 HTML 看起来像这样

<form accept-charset="UTF-8" action="https://bucketname-bucket.s3.amazonaws.com/" data-callback-method="POST" data-callback-param="video[direct_upload_url]" data-callback-url="http://0.0.0.0:3000/videos" enctype="multipart/form-data" id="s3-uploader" method="post">
***some AWS stuff***
<input id="file" multiple="multiple" name="file" type="file">

因此,如果您真的进入该页面,就会有一个按钮显示“选择文件”。如果我点击它,它可以让我选择要上传的文件。但是,当我放入 rspec

click_button "Choose Files"

它说找不到按钮。所以显而易见的问题是,我如何让它假装点击按钮?

【问题讨论】:

    标签: ruby-on-rails-4 rspec capybara


    【解决方案1】:

    您并没有真正提供任何关于您在 Ruby 中的表单以及表单生成的 HTML 或您编写的测试的任何信息,所以我将只给您一个示例。

      let(:user) { FactoryGirl.create(:user) }
      let!(:project) { FactoryGirl.create(:project) }
      before(:each) do
        sign_in_as(user)
      end
    
      scenario 'a registered user logins and creates a new music project' do
        count = Project.all.count
        visit new_project_path
    
        fill_in 'Title', with: "Chillwave Song"
        fill_in 'Description', with: "I started this after being inspired by a Tycho concert"
        attach_file('project[project_file]', File.join(Rails.root, '/spec/support/project.zip'))
    
        click_button('Submit')
    
        expect(page).to have_content('Project created successfully!')
        expect(page).to have_content('I started this after being inspired by a Tycho concert')
        expect(Project.all.count).to eq(count + 1)
      end
    

    所以这里应该有一些东西跳出来 - 你真的想在每次运行测试时上传文件吗?答案应该是否定的,那么你如何“伪造”这个上传过程呢?最好的建议是在您的工厂中使用它:

    FactoryGirl.define do
      factory :attachment do
        file ActionDispatch::Http::UploadedFile.new(:tempfile => File.new("#{Rails.root}/spec/support/project.zip"), :filename => "project.zip")
      end
    end
    

    【讨论】:

    • 嗨,对不起,我不是更清楚。我猜在你的文件中,你声明你的按钮在某处被命名为“提交”,因此你可以点击按钮('提交')。我没有声明我的按钮的名称,它自然会为我做,我想知道在这种情况下如何告诉测试点击它。编辑得更清楚。
    • 编辑您的原始帖子 - 请告诉我您正在使用的表单以及它输出的 html。
    • 嘿@anthony,你是如何在这个测试中实际实现工厂文件的?
    猜你喜欢
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多