在Python Flask单元测试中登录测试失败

时间:2016-01-21 12:35:57

标签: python python-2.7 unit-testing flask

我正在尝试测试我的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

1 个答案:

答案 0 :(得分:0)

好的,所以我最终解决了这个问题。我需要停用CSRF保护。这就是诀窍:

def create_app(self):
    app = Flask(__name__)
    appy.config['TESTING'] = True
    appy.config['WTF_CSRF_ENABLED'] = False
    return appy