Building Data-Driven Web Apps with Flask and SQLAlchemy Transcripts
Chapter: Testing web apps
Lecture: 3 types of web unit tests
Login or
purchase this course
to watch this video and the rest of the course contents.
0:00
Now we're going to group our tests
0:01
into three rough categories
0:03
three types of tests that we're going to have
0:06
when we're testing our web application.
0:08
Now recall I did mention this is not a general course
0:11
or chapter on unit testing
0:13
it's specifically focused on testing the web applications.
0:17
So there's probably other types of tests
0:19
but in our world of testing our web app
0:22
these are the three that we're going to focus on
0:24
and I'll touch on a few more just really quickly.
0:27
So at the lowest, simplest level
0:30
let's start there
0:31
we probably want to test our view models.
0:33
Remember view models are central
0:34
to the data exchange with the user
0:37
with the template, with the view
0:38
and a lot of the validation that we have
0:41
the data validation that's in there
0:43
resides hopefully in these view models.
0:46
So what makes testing them special?
0:48
Well remember internally very often
0:51
they implicitly use a request object.
0:54
So somehow we have to provide this view model
0:57
a fake request or a pre-populated request
1:00
with the data that we need it to work with.
1:03
So this is pretty straightforward.
1:05
We'll also see that sometimes
1:06
these view models talk to the database
1:08
that might be a problem.
1:10
Typically we want to test in isolation
1:12
control very carefully what the database would have said
1:15
and then make sure that the view model responds accordingly.
1:18
So we're going to address that as well in these tests.
1:20
Moving up in a richer, testing-more-at-once side of things
1:24
we might want to test the view method.
1:27
This is the actual thing that has the app.route decorator
1:30
or the blueprint.route decorator
1:32
we'd like to call that as if it were a web request
1:34
not through the whole system
1:36
but we'll just call that function.
1:37
It is a function, we can call it.
1:39
But remember this also works with requests
1:43
maybe even with response
1:44
it might also talk to the database.
1:46
It has a bunch of stuff going on working with Flask
1:49
so we're going to need to carefully spec that out
1:52
or provide it something that will work
1:55
in the way that it expects.
1:57
We also might want to create the entire web application
2:01
let the register blueprint, the database init
2:04
all that kind of stuff get up and running
2:07
and then we're going to feed
2:08
to the overall application a particular URL
2:11
make sure that it finds its way to the right view method
2:13
and that it does the right thing.
2:15
So we'll see that with the testing infrastructure from Flask
2:18
we can actually create a fake request
2:21
as if we were actually running the web application
2:23
we're not going to do it
2:25
not really firing up a server
2:27
going to create a test version
2:28
but then we can simulate
2:30
a browser sending requests to it
2:32
and make sure we're getting the right behavior there as well.
2:35
So these are the three core types of tests
2:37
that we're going to focus on in this chapter.
2:39
On the left in terms of even simpler
2:41
we might have algorithmic tests
2:43
and tests working with other parts of our application
2:46
that are not particular to the web framework.
2:48
And on the right we might even go farther
2:50
and actually deploy our web application
2:52
to say a test server
2:54
QA server, something like this
2:56
and then use Selenium to make
2:57
legitimate requests against it
2:59
and even run the JavaScript
3:01
and interact with it that way.
3:02
So there's lots more we could do
3:03
but these are the three that we're going to focus on
3:05
in the unit test world around web applications.