2017-01-12 13 views
6

Tôi đã sao chép ứng dụng flaskr từ Github và đang cố gắng làm theo hướng dẫn Testing Flask Applications. Sau Bonus: Testing the Application, tôi đã thêm một thư mục con test vào thư mục cấp cao nhất flaskr, do đó cây thư mục của tôi trông như thế này:Chạy thử nghiệm đơn vị trên ứng dụng viết blog hướng dẫn "Flaskr" trong Flask

. 
├── 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 

Lưu ý rằng có cũng 'built-in' kiểm tra trong thư mục tests; tuy nhiên, tôi đang viết các bài kiểm tra ở số test_flaskr.py trong thư mục tests. Cho đến nay tôi đang cố gắng chỉ là một thử nghiệm:

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() 

Tuy nhiên, nếu tôi cố gắng chạy này, tôi nhận được lỗi sau:

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' 

Tôi không hiểu lỗi này. My flaskr.py giống với số https://github.com/pallets/flask/blob/master/examples/flaskr/flaskr/flaskr.py và được định nghĩa init_db. Làm thế nào tôi có thể làm cho các bài kiểm tra đơn vị chạy?

Trả lời

11

Khi bạn nhập gói flaskr trong kịch bản của bạn, bạn có thể truy cập các biến, chức năng vv kê khai và quy định tại flaskr/__init__.py

init_db không được định nghĩa trong flask/__init__.py, các mã được cung cấp, hy vọng init_db phải được xác định trong flask/__init__.py .

Có hai cách để giải quyết vấn đề bạn có:

  1. Thay flaskr.init_db() với flaskr.flaskr.init_db()

  2. Sửa đổi câu lệnh import trong test_flaskr.py như sau:

    Thay đổi import flaskr-from flaskr import flaskr

Các vấn đề liên quan