我正在创建一个实用程序来处理基于webob的应用程序中的文件上传。我想为它写一些单元测试。
我的问题是 - 当webob使用cgi.FieldStorage
上传文件时,我想以简单的方式创建FieldStorage
实例(不模仿整个请求)。我需要做的最小代码是什么(没有什么花哨的,用“Lorem ipsum”内容模拟上传文本文件会很好)。或者嘲笑它是一个更好的主意吗?
答案 0 :(得分:4)
def _create_fs(mimetype, content):
fs = cgi.FieldStorage()
fs.file = fs.make_file()
fs.type = mimetype
fs.file.write(content)
fs.file.seek(0)
return fs
这足以进行我的单元测试。
答案 1 :(得分:4)
你的答案在python3中失败了。这是我的修改。我确定它并不完美,但至少它适用于python2.7和python3.5。
from io import BytesIO
def _create_fs(self, mimetype, content, filename='uploaded.txt', name="file"):
content = content.encode('utf-8')
headers = {u'content-disposition': u'form-data; name="{}"; filename="{}"'.format(name, filename),
u'content-length': len(content),
u'content-type': mimetype}
environ = {'REQUEST_METHOD': 'POST'}
fp = BytesIO(content)
return cgi.FieldStorage(fp=fp, headers=headers, environ=environ)