1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
|
import sys
import os
import subprocess
from os.path import exists, join, dirname
from shutil import rmtree
from tempfile import mkdtemp
import unittest
import scrapy
class ProjectTest(unittest.TestCase):
project_name = 'testproject'
def setUp(self):
self.temp_path = mkdtemp()
self.cwd = self.temp_path
self.proj_path = join(self.temp_path, self.project_name)
self.proj_mod_path = join(self.proj_path, self.project_name)
self.env = os.environ.copy()
self.env['PYTHONPATH'] = dirname(scrapy.__path__[0])
def tearDown(self):
rmtree(self.temp_path)
def call(self, *new_args, **kwargs):
out = os.tmpfile()
args = (sys.executable, '-m', 'scrapy.command.cmdline') + new_args
return subprocess.call(args, stdout=out, stderr=out, cwd=self.cwd, \
env=self.env, **kwargs)
class StartprojectTest(ProjectTest):
def test_startproject(self):
self.assertEqual(0, self.call('startproject', self.project_name))
assert exists(join(self.proj_path, 'scrapy-ctl.py'))
assert exists(join(self.proj_path, 'testproject'))
assert exists(join(self.proj_mod_path, '__init__.py'))
assert exists(join(self.proj_mod_path, 'items.py'))
assert exists(join(self.proj_mod_path, 'pipelines.py'))
assert exists(join(self.proj_mod_path, 'settings.py'))
assert exists(join(self.proj_mod_path, 'spiders', '__init__.py'))
self.assertEqual(1, self.call('startproject', self.project_name))
self.assertEqual(1, self.call('startproject', 'wrong---project---name'))
class CommandTest(ProjectTest):
def setUp(self):
super(CommandTest, self).setUp()
self.call('startproject', self.project_name)
self.cwd = join(self.temp_path, self.project_name)
self.env.pop('SCRAPY_SETTINGS_DISABLED', None)
self.env['SCRAPY_SETTINGS_MODULE'] = '%s.settings' % self.project_name
class GenspiderCommandTest(CommandTest):
def test_template_default(self, *args):
self.assertEqual(0, self.call('genspider', 'testspider', 'test.com', *args))
assert exists(join(self.proj_mod_path, 'spiders', 'testspider.py'))
self.assertEqual(1, self.call('genspider', 'otherspider', 'test.com'))
def test_template_basic(self):
self.test_template_default('--template=basic')
def test_template_csvfeed(self):
self.test_template_default('--template=csvfeed')
def test_template_xmlfeed(self):
self.test_template_default('--template=xmlfeed')
def test_template_crawl(self):
self.test_template_default('--template=crawl')
def test_list(self):
self.assertEqual(0, self.call('genspider', '--list'))
def test_dump(self):
self.assertEqual(0, self.call('genspider', '--dump'))
self.assertEqual(0, self.call('genspider', '--dump', '--template=basic'))
class MiscCommandsTest(CommandTest):
def test_crawl(self):
self.assertEqual(0, self.call('crawl'))
def test_list(self):
self.assertEqual(0, self.call('list'))
if __name__ == '__main__':
unittest.main()
|