Skip to content

Commit 0fa63bf

Browse files
committedOct 2, 2014
flask-testing
1 parent a5b4d0d commit 0fa63bf

File tree

3 files changed

+42
-21
lines changed

3 files changed

+42
-21
lines changed
 

‎config.py

+7
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,13 @@ class BaseConfig(object):
1010
print SQLALCHEMY_DATABASE_URI
1111

1212

13+
class TestConfig(BaseConfig):
14+
DEBUG = True
15+
TESTING = True
16+
WTF_CSRF_ENABLED = False
17+
SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:'
18+
19+
1320
class DevelopmentConfig(BaseConfig):
1421
DEBUG = True
1522

‎requirements.txt

+1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ Flask-Bcrypt==0.6.0
33
Flask-Migrate==1.2.0
44
Flask-SQLAlchemy==1.0
55
Flask-Script==2.0.5
6+
Flask-Testing==0.4.2
67
Flask-WTF==0.10.2
78
Jinja2==2.7.3
89
Mako==1.0.0

‎tests.py

+34-21
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,43 @@
1-
from project import app
21
import unittest
2+
from flask.ext.testing import TestCase
3+
from project import app, db
4+
from project.models import User, BlogPost
35

46

5-
class FlaskTestCase(unittest.TestCase):
7+
class BaseTestCase(TestCase):
8+
"""A base test case."""
9+
10+
def create_app(self):
11+
app.config.from_object('config.TestConfig')
12+
return app
13+
14+
def setUp(self):
15+
db.create_all()
16+
db.session.add(BlogPost("Test post", "This is a test. Only a test."))
17+
db.session.add(User("admin", "ad@min.com", "admin"))
18+
db.session.commit()
19+
20+
def tearDown(self):
21+
db.session.remove()
22+
db.drop_all()
23+
24+
25+
class FlaskTestCase(BaseTestCase):
626

727
# Ensure that Flask was set up correctly
828
def test_index(self):
9-
tester = app.test_client(self)
10-
response = tester.get('/login', content_type='html/text')
29+
response = self.client.get('/login', content_type='html/text')
1130
self.assertEqual(response.status_code, 200)
1231

1332
# Ensure that the login page loads correctly
1433
def test_login_page_loads(self):
15-
tester = app.test_client(self)
16-
response = tester.get('/login')
34+
response = self.client.get('/login')
1735
self.assertIn(b'Please login', response.data)
1836

1937
# Ensure login behaves correctly with correct credentials
2038
def test_correct_login(self):
21-
tester = app.test_client()
22-
response = tester.post(
39+
40+
response = self.client.post(
2341
'/login',
2442
data=dict(username="admin", password="admin"),
2543
follow_redirects=True
@@ -28,46 +46,41 @@ def test_correct_login(self):
2846

2947
# Ensure login behaves correctly with incorrect credentials
3048
def test_incorrect_login(self):
31-
tester = app.test_client()
32-
response = tester.post(
49+
response = self.client.post(
3350
'/login',
3451
data=dict(username="wrong", password="wrong"),
3552
follow_redirects=True
3653
)
37-
self.assertIn(b'Invalid Credentials. Please try again.', response.data)
54+
self.assertIn(b'Invalid username or password.', response.data)
3855

3956
# Ensure logout behaves correctly
4057
def test_logout(self):
41-
tester = app.test_client()
42-
tester.post(
58+
self.client.post(
4359
'/login',
4460
data=dict(username="admin", password="admin"),
4561
follow_redirects=True
4662
)
47-
response = tester.get('/logout', follow_redirects=True)
63+
response = self.client.get('/logout', follow_redirects=True)
4864
self.assertIn(b'You were logged out', response.data)
4965

5066
# Ensure that main page requires user login
5167
def test_main_route_requires_login(self):
52-
tester = app.test_client()
53-
response = tester.get('/', follow_redirects=True)
68+
response = self.client.get('/', follow_redirects=True)
5469
self.assertIn(b'You need to login first.', response.data)
5570

5671
# Ensure that logout page requires user login
5772
def test_logout_route_requires_login(self):
58-
tester = app.test_client()
59-
response = tester.get('/logout', follow_redirects=True)
73+
response = self.client.get('/logout', follow_redirects=True)
6074
self.assertIn(b'You need to login first.', response.data)
6175

6276
# Ensure that posts show up on the main page
6377
def test_posts_show_up_on_main_page(self):
64-
tester = app.test_client()
65-
response = tester.post(
78+
response = self.client.post(
6679
'/login',
6780
data=dict(username="admin", password="admin"),
6881
follow_redirects=True
6982
)
70-
self.assertIn(b'Hello from the shell', response.data)
83+
self.assertIn(b'This is a test. Only a test.', response.data)
7184

7285

7386
if __name__ == '__main__':

0 commit comments

Comments
 (0)