我知道在测试中默认情况下禁用登录。我正在尝试通过将app.config['LOGIN_DISABLED']
设置为False来恢复它们。这似乎不起作用,因为current_user
仍返回None
,但是将在测试文件之外的代码中返回User。
一些相关的代码在下面。我的Flask应用程序对象最初是在应用程序的主__init__.py
中创建的,该对象在测试过程中已导入并重新配置。
===========
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager
app = Flask(__name__)
app.config[u'DEBUG'] = settings.debug
db = SQLAlchemy(app)
login_manager = LoginManager()
login_manager.init_app(app)
===========
from my_app import app, db
import unittest
class BaseTest(unittest.TestCase):
def setUp(self):
app.config['TESTING'] = True
app.config['LOGIN_DISABLED'] = False
#app.login_manager._login_disabled = False #doesn't help either
self.app = app.test_client()
db.create_all()
===========
from flask_login import current_user
from my_app.tests.base import BaseTest
class MyTests(BaseTest):
def test_a(self):
#visit endpoint that calls `login_user(user)`
#printing `current_user` in that endpoint works, but the following line only returns `None`
print current_user
注意:绝对应该在打印语句之前登录用户。在端点中使用current_user
可以正常工作。
答案 0 :(得分:0)
原来我的问题是由于测试未使用相同的上下文,所以我的解决方案与here和here相似。 import React, {Component} from 'react';
import { Container, Row, Col } from 'reactstrap';
import TimePicker from 'rc-time-picker';
import './Offers.css';
export default class OffersPage extends Component {
constructor(props) {
super(props);
}
render() {
return (
<div>
<TimePicker></TimePicker>
</div>
)
}
}
现在看起来像:
import 'rc-time-picker/assets/index.css';
import React from 'react';
import ReactDom from 'react-dom';
import moment from 'moment';
import TimePicker from 'rc-time-picker';
ReactDom.render(
<TimePicker defaultValue={moment()} showSecond={false} minuteStep={15} />
, document.getElementById('__react-content'));
奇怪的是,此更改后,return redirect()->route('home');
和tests/test_a.py
没关系-都可以删除。