Я пытаюсь проверить свои функции входа в систему с помощью Flask-Testing. Я следую за Flask docs on testing. Функция test_login()
вызывает AttributeError: 'Flask' object has no attribute 'post'
. Почему я получаю эту ошибку?Объект «Flask» не имеет атрибута «post» error для теста входа в систему
Traceback (most recent call last):
File "/home/lucas/PycharmProjects/FYP/Shares/tutorial/steps/test.py", line 57, in test_login_logout
rv = self.login('lucas', 'test') <br> <br>
File "/home/lucas/PycharmProjects/FYP/Shares/tutorial/steps/test.py", line 47, in login
return self.app.post('/login', data=dict(
AttributeError: 'Flask' object has no attribute 'post'
from flask.ext.testing import TestCase
from flask import Flask
from Shares import db
import manage
class test(TestCase):
def create_app(self):
app = Flask(__name__)
app.config['TESTING'] = True
return app
SQLALCHEMY_DATABASE_URI = "sqlite://"
TESTING = True
def setUp(self):
manage.initdb()
def tearDown(self):
db.session.remove()
db.drop_all()
def test_adduser(self):
user = User(username="test", email="[email protected]")
user2 = User(username="lucas", email="[email protected]")
db.session.add(user)
db.session.commit()
assert user in db.session
assert user2 not in db.session
def login(self, username, password):
return self.app.post('/login', data=dict(
username=username,
password=password
), follow_redirects=True)
def logout(self):
return self.app.get('/logout', follow_redirects=True)
def test_login(self):
rv = self.login('lucas', 'test')
assert 'You were logged in' in rv.data
Благодаря @jumbopap Однако теперь у меня есть ошибки утверждение: '( Ошибка брошено по строке rv = self.login ('lucas', 'test') Мой маршрут имеет следующее определение: @ app.route ("/ login", methods = ["GET", "POST" ]) def login(): Любые идеи, что может быть неправильным? :) –
Ваше фактическое производственное приложение не тестируется этим набором тестов. Вы создаете совершенно отдельное приложение в 'create_app', которое не имеет маршрута'/login'. Вам нужно будет импортировать свое производственное приложение из любого места, где оно хранится, и вернуть его в метод 'create_app'. – jumbopap