added tests for scrapy-ctl commands

This commit is contained in:
Ismael Carnales 2009-08-28 14:42:07 -03:00
parent 3616ccb479
commit 0b68d4bbef
3 changed files with 125 additions and 1 deletions

View File

@ -2,6 +2,7 @@ import shutil
import string
from os import listdir
from os.path import join, dirname, abspath, exists
import sys
import scrapy
from scrapy.spider import spiders
@ -62,7 +63,7 @@ class Command(ScrapyCommand):
if spider and not opts.force:
print "Spider '%s' already exists in module:" % domain
print " %s" % spider.__module__
return
sys.exit(1)
template_file = self._find_template(opts.template)
if template_file:

View File

@ -3,6 +3,7 @@
import os
import string
import re
import sys
import scrapy
from scrapy.command import ScrapyCommand
@ -44,7 +45,12 @@ class Command(ScrapyCommand):
else:
message = 'Project names must contain only letters, numbers and underscores'
print "Invalid project name: %s\n\n%s" % (project_name, message)
sys.exit(1)
else:
if os.path.exists(project_name):
print "%s dir already exists" % project_name
sys.exit(1)
project_root_path = project_name
roottpl = os.path.join(PROJECT_TEMPLATES_PATH, 'root')

View File

@ -0,0 +1,117 @@
import os
from os.path import exists, join
import subprocess
from shutil import rmtree
import sys
from tempfile import mkdtemp
from unittest import TestCase
import scrapy
from scrapy.conf import settings
class ProjectTest(TestCase):
project_name = 'testproject'
def setUp(self):
self.temp_path = mkdtemp()
self.cwd = self.temp_path
def tearDown(self):
rmtree(self.temp_path)
def call(self, new_args, **kwargs):
out = os.tmpfile()
args = [sys.executable, '-m', 'scrapy.command.cmdline']
args.extend(new_args)
env = self.env if hasattr(self, 'env') else os.environ
return subprocess.call(args, stdout=out, stderr=out, cwd=self.cwd, \
env=env, **kwargs)
class ScrapyCtlStartprojectTest(ProjectTest):
def test_startproject(self):
proj_path = join(self.temp_path, self.project_name)
proj_mod_path = join(proj_path, self.project_name)
ret = self.call(['startproject', self.project_name])
self.assertEqual(ret, 0)
self.assertEqual(exists(join(proj_path, 'scrapy-ctl.py')), True)
self.assertEqual(exists(join(proj_path, 'testproject')), True)
self.assertEqual(exists(join(proj_mod_path, '__init__.py')), True)
self.assertEqual(exists(join(proj_mod_path, 'items.py')), True)
self.assertEqual(exists(join(proj_mod_path, 'pipelines.py')), True)
self.assertEqual(exists(join(proj_mod_path, 'settings.py')), True)
self.assertEqual(exists(join(proj_mod_path, 'spiders', '__init__.py')), True)
ret = self.call(['startproject', self.project_name])
self.assertEqual(ret, 1)
ret = self.call(['startproject', 'wrong---project---name'])
self.assertEqual(ret, 1)
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 = os.environ.copy()
self.env.pop('SCRAPY_SETTINGS_DISABLED', None)
self.env['SCRAPY_SETTINGS_MODULE'] = '%s.settings' % self.project_name
class ScrapyCtlCommandsTest(CommandTest):
def test_crawl(self):
ret = self.call(['crawl'])
self.assertEqual(ret, 0)
def test_genspider_subcommands(self):
ret = self.call(['genspider', '--list'])
self.assertEqual(ret, 0)
ret = self.call(['genspider', '--dump'])
self.assertEqual(ret, 0)
ret = self.call(['genspider', '--dump', '--template=basic'])
self.assertEqual(ret, 0)
def test_list(self):
ret = self.call(['list'])
self.assertEqual(ret, 0)
class BaseGenspiderTest(CommandTest):
template = 'basic'
def test_genspider(self):
ret = self.call(['genspider', 'testspider', 'test.com',
'--template=%s' % self.template])
self.assertEqual(ret, 0)
self.assertEqual(os.path.exists(join(self.cwd, self.project_name, \
'spiders', 'testspider.py')), True)
ret = self.call(['genspider', 'otherspider', 'test.com'])
self.assertEqual(ret, 1)
class CrawlGenspiderTest(BaseGenspiderTest):
template = 'crawl'
class CsvFeedGenspiderTest(BaseGenspiderTest):
template = 'csvfeed'
class XMLFeedGenspiderTest(BaseGenspiderTest):
template = 'xmlfeed'