我正在努力为负责上传从页面上的表单收到的图片的功能创建单元测试。
主要问题是我无法弄清楚如何将图片添加到虚拟请求的发布参数并将其传递给函数。
这是我要测试的代码。
谢谢
@view_config(route_name='profile_pic')
def profilePictureUpload(request):
if 'form.submitted' in request.params:
#max picture size is 700kb
form = Form(request, schema=PictureUpload)
if request.method == 'POST' and form.validate():
upload_directory = 'filesystem_path'
upload = request.POST.get('profile')
saved_file = str(upload_directory) + str(upload.filename)
perm_file = open(saved_file, 'wb')
shutil.copyfileobj(upload.file, perm_file)
upload.file.close()
perm_file.close()
else:
log.info(form.errors)
redirect_url = route_url('profile', request)
return HTTPFound(location=redirect_url)
最佳答案
用客户端提供的名称 (upload.filename
) 在您的文件系统上实际创建一个文件是非常糟糕的做法(和潜在的安全漏洞)。
除此之外,我在您的代码中看到您调用了 request.params
、request.POST.get('profile')
、upload .file
和 upload.filename
。我们可以模拟所有这些,最终为 upload.file
提供一个 StringIO 对象。
class MockCGIFieldStorage(object):
pass
upload = MockCGIFieldStorage()
upload.file = StringIO('foo')
upload.filename = 'foo.html'
request = DummyRequest(post={'profile': upload, 'form.submitted': '1'})
response = profilePictureUpload(request)
关于python - Pyramid - 为文件上传表单编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11102432/