Looks like my system strikes back. A fitting thing to happen for an episode 2, I guess. Turns out that
virtualenvneed some extra care and feeding when kept together. Installing another copy of nosetests into my virtualenv fixed the test failures I was seeing. Thanks to the folks on #python and #pocoo for pointing me the right way.
Of course this broke the code coverage. Nothing a
pip install --upgrade coveragewouldn't fix, though. As an added bonus, the coverage html output now looks much nicer. I guess it was redesigned between whatever my system got and the version pip grabbed.
Of course, after spending quite some time writing tests for my email sending module, the #pocoo folks point me at the already existing Flask-Mail extension, that integrates into the Flask test harness (as in, if you're testing, it won't send email) already. Oh well. Switched, ditched quite some code and corresponding tests. Even less stuff I have to maintain myself.
Unfortunately, Flask-Mail doesn't seem to like it when you switch on
app.config['TESTING'] = Trueafter initialization. Fortunately, you can still fiddle with the value used so it doesn't try sending emails, like so:
def setUp(self): webapp.app.config['TESTING'] = True webapp.mail.suppress = TrueThe key here is the
mail.suppress = Truesetting. Once that's done, all the testing options work as expected. You can even have a look at the msg objects that would have been sent using the following snippet:
def test_sent_mail(self): """Test if emails were generated and sent correctly""" with webapp.mail.record_messages() as outbox: rv = self.app.post('/send-email', data=dict(message="hello world")) assert len(outbox) == 1 msg = outbox assert "hello world" in msg.bodyI like it, this really gets all the stuff I do under test in a very straightforward manner.