From 20b4c8f3eac1ed9e5b48c6b19c65b405d3646bb7 Mon Sep 17 00:00:00 2001 From: Julia Medina Date: Fri, 4 Apr 2014 16:38:09 -0300 Subject: [PATCH] Trial functionality for running tests with pytest * Change current dir to tmp dir on each test run * Log twisted with test.log --- pytest.ini | 3 +++ scrapy/conftest.py | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 pytest.ini create mode 100644 scrapy/conftest.py diff --git a/pytest.ini b/pytest.ini new file mode 100644 index 000000000..b845effc9 --- /dev/null +++ b/pytest.ini @@ -0,0 +1,3 @@ + +[pytest] +usefixtures = chdir setlog diff --git a/scrapy/conftest.py b/scrapy/conftest.py new file mode 100644 index 000000000..e98e9076f --- /dev/null +++ b/scrapy/conftest.py @@ -0,0 +1,39 @@ + +import pytest +from twisted.python import log + + +class LogObservers: + """Class for keeping track of log observers across test modules""" + + def __init__(self): + self.observers = [] + + def add(self, logfile='test.log'): + fileobj = open(logfile, 'wb') + observer = log.FileLogObserver(fileobj) + log.startLoggingWithObserver(observer.emit, 0) + self.observers.append((fileobj, observer)) + + def remove(self): + fileobj, observer = self.observers.pop() + log.removeObserver(observer.emit) + fileobj.close() + + +@pytest.fixture(scope='module') +def log_observers(): + return LogObservers() + + +@pytest.fixture() +def setlog(request, log_observers): + """Attach test.log file observer to twisted log, for trial compatibility""" + log_observers.add() + request.addfinalizer(log_observers.remove) + + +@pytest.fixture() +def chdir(tmpdir): + """Change to pytest-provided temporary directory""" + tmpdir.chdir()