python - Pyramid - 为文件上传表单编写单元测试

标签 python unit-testing python-2.7 pyramid

我正在努力为负责上传从页面上的表单收到的图片的功能创建单元测试。

主要问题是我无法弄清楚如何将图片添加到虚拟请求的发布参数并将其传递给函数。

这是我要测试的代码。

谢谢

@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.paramsrequest.POST.get('profile')upload .fileupload.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/

相关文章:

python - mongokit 未找到集合

unit-testing - 如何在grails中测试规模约束

python-2.7 - 在python中使用For循环求正偶数和负奇数之和

python - Curve_fit 产生一条平坦的线

unit-testing - 如何对没有副作用的方法进行单元测试?

python - Ctypes将float传递给函数返回随机数

python - 使用 session 的Django View 中 “def”的语法错误

python - 模块未找到错误: No module named 'pandas' when importing module

python - 如何在列表理解中正确捕获生成器输出?

c# - Rhino 模拟 AAA 快速入门?