我正在尝试测试我的Python Flask应用程序的登录功能。
我创建了一个用户并在test_adduser()
测试中将它们添加到数据库中,并且传递正常。但是,test_login()
测试失败并出现断言错误。我已经调试了代码并且测试加载了登录页面确定(因此我知道问题不在于应用程序或路由等)但它没有登录并重定向用户。
我意识到这篇文章的描述有点短,即错误跟踪,但错误实际上是#34; AssertionError"。
也许我正在做一些明显错误的事情,比如我将用户凭据传递给测试的方式,有人可以向我指出这一点?
谢谢!
from flask.ext.testing import TestCase
from flask import Flask
from Shares import db, app as appy
from Shares.models import User
import manage
class test(TestCase):
def create_app(self):
app = Flask(__name__)
app.config['TESTING'] = True
return appy
SQLALCHEMY_DATABASE_URI = "sqlite://"
TESTING = True
def setUp(self):
manage.initdb()
#print self.login('lucas', 'test').data
def tearDown(self):
db.session.remove()
db.drop_all()
def login(self, username, password):
return self.client.post('/login', data=dict(
username=username,
password=password
), follow_redirects=True)
def logout(self):
return self.client.get('/logout', follow_redirects=True)
def test_adduser(self):
lucas=User(username="lucas", email="lucas@example.com", password="test")
user2 = User(username="lucas", email="lucas@test.com")
db.session.add(lucas)
db.session.commit()
assert lucas in db.session
assert user2 not in db.session
def test_login(self):
lucas=User(username="lucas", email="lucas@example.com", password="test")
db.session.add(lucas)
rv = self.login('lucas', 'test')
assert 'Welcome' in rv.data
答案 0 :(得分:0)
好的,所以我最终解决了这个问题。我需要停用CSRF保护。这就是诀窍:
def create_app(self):
app = Flask(__name__)
appy.config['TESTING'] = True
appy.config['WTF_CSRF_ENABLED'] = False
return appy