diff --git a/common/lib/xmodule/xmodule/tests/test_error_module.py b/common/lib/xmodule/xmodule/tests/test_error_module.py index ff824b5130..341bca4d05 100644 --- a/common/lib/xmodule/xmodule/tests/test_error_module.py +++ b/common/lib/xmodule/xmodule/tests/test_error_module.py @@ -119,7 +119,6 @@ class TestErrorModuleConstruction(unittest.TestCase): self.descriptor.xmodule_runtime.error_descriptor_class = ErrorDescriptor self.descriptor.xmodule_runtime.xmodule_instance = None - @unittest.expectedFailure def test_broken_module(self): """ Test that when an XModule throws an error during __init__, we @@ -136,7 +135,6 @@ class TestErrorModuleConstruction(unittest.TestCase): with self.assertRaises(TestException): module = self.descriptor._xmodule - @unittest.expectedFailure @patch.object(ErrorModule, '__init__', Mock(side_effect=TestException)) def test_broken_error_module(self): """ diff --git a/common/lib/xmodule/xmodule/x_module.py b/common/lib/xmodule/xmodule/x_module.py index e644185c8c..77f6874d59 100644 --- a/common/lib/xmodule/xmodule/x_module.py +++ b/common/lib/xmodule/xmodule/x_module.py @@ -746,6 +746,10 @@ class XModuleDescriptor(XModuleMixin, HTMLSnippet, ResourceTemplates, XBlock): ) self.xmodule_runtime.xmodule_instance.save() except Exception: # pylint: disable=broad-except + # xmodule_instance is set by the XModule.__init__. If we had an error after that, + # we need to clean it out so that we can set up the ErrorModule instead + self.xmodule_runtime.xmodule_instance = None + if isinstance(self, self.xmodule_runtime.error_descriptor_class): log.exception('Error creating an ErrorModule from an ErrorDescriptor') raise