Tôi đang cố thêm các thử nghiệm vào ứng dụng cơ bản của mình. Truy cập mọi thứ yêu cầu đăng nhập.(unittest) Kiểm tra Flask-Security: Không thể truy cập trang đăng nhập trước đây
Dưới đây là bài kiểm tra trường hợp lớp học của tôi:
class MyAppTestCase(FlaskTestCaseMixin):
def _create_app(self):
raise NotImplementedError
def _create_fixtures(self):
self.user = EmployeeFactory()
def setUp(self):
super(MyAppTestCase, self).setUp()
self.app = self._create_app()
self.client = self.app.test_client()
self.app_context = self.app.app_context()
self.app_context.push()
db.create_all()
self._create_fixtures()
self._create_csrf_token()
def tearDown(self):
super(MyAppTestCase, self).tearDown()
db.drop_all()
self.app_context.pop()
def _post(self, route, data=None, content_type=None, follow_redirects=True, headers=None):
content_type = content_type or 'application/x-www-form-urlencoded'
return self.client.post(route, data=data, follow_redirects=follow_redirects, content_type=content_type, headers=headers)
def _login(self, email=None, password=None):
email = email or self.user.email
password = password or 'password'
data = {
'email': email,
'password': password,
'remember': 'y'
}
return self._post('/login', data=data)
class MyFrontendTestCase(MyAppTestCase):
def _create_app(self):
return create_app(settings)
def setUp(self):
super(MyFrontendTestCase, self).setUp()
self._login()
Tôi đang chạy thử nghiệm của tôi sử dụng nosetests trong Terminal như vậy: source my_env/bin/activate && nosetests --exe
xét nghiệm cơ bản như thế này không:
class CoolTestCase(MyFrontendTestCase):
def test_logged_in(self):
r = self._login()
self.assertIn('MyAppName', r.data)
def test_authenticated_access(self):
r = self.get('/myroute/')
self.assertIn('MyAppName', r.data)
Từ đầu ra , Tôi thấy rằng r.data
chỉ là HTML của trang đăng nhập không có lỗi (ví dụ: tên người dùng hoặc mật khẩu sai) hoặc cảnh báo ("Vui lòng đăng nhập để truy cập vào trang này trang").
Tôi đang đăng nhập trong quá trình setUp
, vì vậy test_authenticated_access
nên có cho tôi hoặc truy cập /myroute/
hoặc chuyển hướng tôi đến trang đăng nhập với thông điệp lóe lên "Xin hãy đăng nhập để truy cập vào trang này". Nhưng nó không.
Tôi không thể tìm ra điều gì sai. Tôi dựa thử nghiệm của tôi tắt của những người tôi tìm thấy trong tài liệu hướng dẫn Flask và this app boilerplate
Tôi thấy bạn đang sử dụng CSRF mã thông báo - bạn đã thử tắt chúng và nhìn thấy nếu mà được bạn xa hơn? Tôi biết họ đã cắn tôi trong các bài kiểm tra nhiều lần hơn tôi có thể nhớ. –
Nếu bạn đang sử dụng (hoặc có thể sử dụng) Flask 0.10, tôi khuyên bạn nên sử dụng nội dung giả mạo mới: http://flask.pocoo.org/docs/testing/#faking-resources-and-context Chúng tôi hiện đang làm một cái gì đó rất giống với những gì bạn đang làm cho các bài kiểm tra của chúng tôi, và ngay sau khi chúng tôi có thể nâng cấp, tôi trích xuất nó tất cả ra ủng hộ điều này. –
@RachelSanders - Tôi đã đặt 'WTF_CSRF_ENABLED' thành' False' –