Building Data-Driven Web Apps with Pyramid and SQLAlchemy Transcripts
Chapter: Testing web apps
Lecture: Special challenges of the web
0:00 Let's focus on some of the special challenges we might have in testing web projects. Here is a POST view method that's going to handle
0:10 the postback, when we're doing registration. So, this is how users actually register on our site. And, you look at it, you can see there's things
0:16 we might want to test, this interaction with the ViewModel this error handling, the actual creation of the account.
0:23 But, look carefully. You'll see there are certain areas where this is much harder than just some sort of algorithmic thing.
0:32 We're creating a register ViewModel and, oh it takes a request. That's an actual Pyramid request.
0:38 With various dictionaries like the Post, Get, matchdict headers, URLs, all sorts of stuff. Hmmm, how do we create one of those?
0:48 That could be tricky. Validate. Remember the register ViewModel actually goes back to the database to make sure the user that's trying
0:54 to register isn't already registered. How do we talk to the database? We don't actually want to go to the database in our test.
1:01 What we want to do is run these tests in isolation. So, how do we make that still do something meaningful without actually going to the database.
1:08 That's really tricky. We're going to create an account. Well that's definitely going to go to the database, right.
1:13 Maybe it's also going to send like a welcome email who knows what that user service thing does.
1:18 It might do all kinds of things we don't want to happen. So, we don't want an email to get sent to a random person
1:24 every time these automatic tests run, right. We want to make sure that doesn't happen but we might want to verify that the email would
1:31 have been sent correctly. Similarly login, what does that mean? This redirect that probably throws an exception
1:37 but in a positive way, right, throws a HTTPFound exception for /account. So, all of these things are special challenges
1:45 of working with the web when we're doing testing.