diff --git a/src/js/renderers/editor-dom.js b/src/js/renderers/editor-dom.js index 6d49fec91..9726eddf9 100644 --- a/src/js/renderers/editor-dom.js +++ b/src/js/renderers/editor-dom.js @@ -473,6 +473,11 @@ let destroyHooks = { // FIXME before we render marker, should delete previous renderNode's element // and up until the next marker element + // If an atom throws during render we may end up later destroying a renderNode + // that has not rendered yet, so exit early here if so. + if (!renderNode.isRendered) { + return; + } let { markupElement } = renderNode; if (marker.section) { diff --git a/tests/unit/editor/atom-lifecycle-test.js b/tests/unit/editor/atom-lifecycle-test.js index b4f561d35..74e2013a2 100644 --- a/tests/unit/editor/atom-lifecycle-test.js +++ b/tests/unit/editor/atom-lifecycle-test.js @@ -12,9 +12,7 @@ module('Unit: Editor: Atom Lifecycle', { }, afterEach() { if (editor) { - try { - editor.destroy(); - } catch(e) {} + editor.destroy(); editor = null; } } @@ -207,8 +205,6 @@ test('rendering unknown atom without unknownAtomHandler throws', (assert) => { }, new RegExp(`Unknown atom "${atomName}".*no unknownAtomHandler`)); }); - - test('onTeardown hook is called when editor is destroyed', (assert) => { const atomName = 'test-atom';