def test_job_error_method_should_be_called(self): class ExceptionWithCode(Exception): def __init__(self, message, code): super(ExceptionWithCode, self).__init__(message) self.message = message self.code = code def callback(job, queue): raise ExceptionWithCode('foobar', 42) job1 = Job.add_job(identifier='job:1', queue_name='test') queue = Queue.get_queue(name='test') worker = Worker(name='test', max_loops=1) # no callback worker.run() self.assertEqual(job1.status.hget(), STATUSES.ERROR) self.assertIn(job1.get_pk(), queue.errors.lmembers()) self.assertEqual(len(Error.collection()), 1) error = Error.get(identifier='job:1') self.assertEqual(error.message.hget(), 'You must implement your own action') self.assertEqual(error.code.hget(), None) job2 = Job.add_job(identifier='job:2', queue_name='test') queue = Queue.get_queue(name='test') worker = Worker(name='test', max_loops=1, callback=callback) # callback with exception worker.run() self.assertEqual(job2.status.hget(), STATUSES.ERROR) self.assertIn(job2.get_pk(), queue.errors.lmembers()) self.assertEqual(len(Error.collection()), 2) error = Error.get(identifier='job:2') self.assertEqual(error.message.hget(), 'foobar') self.assertEqual(error.code.hget(), '42')