当前位置:  开发笔记 > 编程语言 > 正文

运行单元测试Flask中的"Flaskr"教程微博应用程序

如何解决《运行单元测试Flask中的"Flaskr"教程微博应用程序》经验,为你挑选了1个好方法。

我从Github 克隆了烧瓶应用程序,并尝试按照Testing Flask Applications教程进行操作.以下奖励:测试应用程序,我已经test在顶级flaskr目录中添加了一个子目录,因此我的目录树如下所示:

.
??? build
?   ??? bdist.linux-x86_64
?   ??? lib.linux-x86_64-2.7
?       ??? flaskr
?           ??? flaskr.py
?           ??? __init__.py
?           ??? schema.sql
?           ??? static
?           ?   ??? style.css
?           ??? templates
?               ??? layout.html
?               ??? login.html
?               ??? show_entries.html
??? dist
?   ??? flaskr-0.0.0-py2.7.egg
??? flaskr
?   ??? flaskr.db
?   ??? flaskr.py
?   ??? flaskr.pyc
?   ??? __init__.py
?   ??? __init__.pyc
?   ??? schema.sql
?   ??? static
?   ?   ??? style.css
?   ??? templates
?       ??? layout.html
?       ??? login.html
?       ??? show_entries.html
??? flaskr.egg-info
?   ??? dependency_links.txt
?   ??? PKG-INFO
?   ??? requires.txt
?   ??? SOURCES.txt
?   ??? top_level.txt
??? MANIFEST.in
??? README
??? setup.cfg
??? setup.py
??? test
?   ??? test_flaskr.py
??? tests
    ??? test_flaskr.py

请注意,目录中还有"内置"测试tests; 但是,我正在test_flaskr.py目录中编写测试tests.到目前为止,我只尝试了一个测试:

import os
import flaskr
import unittest
import tempfile

class FlaskrTestCase(unittest.TestCase):

    def setUp(self):
        self.db_fd, flaskr.app.config['DATABASE'] = tempfile.mkstemp()
        flaskr.app.config['TESTING'] = True
        self.app = flaskr.app.test_client()
        with flaskr.app.app_context():
            flaskr.init_db()

    def tearDown(self):
        os.close(self.db_fd)
        os.unlink(flaskr.app.config['DATABASE'])

    def test_empty_db(self):
        rv = self.app.get('/')
        assert b'No entries here so far' in rv.data

if __name__ == '__main__':
    unittest.main()

但是,如果我尝试运行此操作,则会出现以下错误:

Traceback (most recent call last):
  File "/home/kurt/dev/scratch/flask/examples/flaskr/test/test_flaskr.py", line 13, in setUp
    flaskr.init_db()
AttributeError: 'module' object has no attribute 'init_db'

我不明白这个错误.我和https://github.com/pallets/flask/blob/master/examples/flaskr/flaskr/flaskr.pyflaskr.py上的相同,并且定义了一个函数.如何进行单元测试?init_db



1> metmirr..:

flaskr在脚本中导入包时,可以访问声明和定义的变量,函数等flaskr/__init__.py

init_db未定义flask/__init__.py,提供的代码,期望init_db在中定义flask/__init__.py.

有两种方法可以解决您遇到的问题:

    替换flaskr.init_db()flaskr.flaskr.init_db()

    修改import语句test_flaskr.py如下:

    更改import flaskrfrom flaskr import flaskr

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有