gpt4 book ai didi

ruby-on-rails-4 - Rspec 测试表单文件上传

转载 作者:行者123 更新时间:2023-12-03 03:09:25 27 4
gpt4 key购买 nike

我正在尝试使用 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 表单以及表单生成的 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

关于ruby-on-rails-4 - Rspec 测试表单文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24795252/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com