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()