From 97a52738cf7ae21b12b2f1f9523b268a38eb4227 Mon Sep 17 00:00:00 2001 From: Wesley Workman Date: Tue, 31 Jan 2017 21:15:47 -0500 Subject: [PATCH] [BUGFIX] Changed backburner's error handler to use `dispatchError` instead of `onError`. This is so that backburner errors can be caught my the `Test.adapter`. Fixes #14864. --- packages/ember-metal/lib/run_loop.js | 4 +-- .../tests/run_loop/onerror_test.js | 29 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/packages/ember-metal/lib/run_loop.js b/packages/ember-metal/lib/run_loop.js index cb28f4ab1fa..748ff8b0bd6 100644 --- a/packages/ember-metal/lib/run_loop.js +++ b/packages/ember-metal/lib/run_loop.js @@ -2,7 +2,7 @@ import { GUID_KEY } from 'ember-utils'; import { assert } from './debug'; import { isTesting } from './testing'; import { - getOnerror, + dispatchError, setOnerror } from './error_handler'; import { @@ -21,7 +21,7 @@ function onEnd(current, next) { const onErrorTarget = { get onerror() { - return getOnerror(); + return dispatchError; }, set onerror(handler) { return setOnerror(handler); diff --git a/packages/ember-metal/tests/run_loop/onerror_test.js b/packages/ember-metal/tests/run_loop/onerror_test.js index 78df6a11e9a..fa41c945733 100644 --- a/packages/ember-metal/tests/run_loop/onerror_test.js +++ b/packages/ember-metal/tests/run_loop/onerror_test.js @@ -1,5 +1,7 @@ import run from '../../run_loop'; import { setOnerror, getOnerror } from '../../error_handler'; +import { isTesting, setTesting } from '../../testing'; +import { Test, QUnitAdapter } from 'ember-testing'; QUnit.module('system/run_loop/onerror_test'); @@ -23,13 +25,40 @@ QUnit.test('With Ember.onerror undefined, errors in Ember.run are thrown', funct QUnit.test('With Ember.onerror set, errors in Ember.run are caught', function () { let thrown = new Error('Boom!'); let original = getOnerror(); + let originalAdapter = Test.adapter; + let originalIsTesting = isTesting(); let caught; setOnerror(error => { caught = error; }); + Test.adapter = null; + setTesting(false); + try { run(() => { throw thrown; }); } finally { setOnerror(original); + Test.adapter = originalAdapter; + setTesting(originalIsTesting); + } + + deepEqual(caught, thrown); +}); + +QUnit.test('With Ember.Test.adapter set, errors in Ember.run are caught', function () { + let thrown = new Error('Boom!'); + let originalAdapter = Test.adapter; + + let caught; + Test.adapter = QUnitAdapter.create({ + exception(error) { + caught = error; + } + }); + + try { + run(() => { throw thrown; }); + } finally { + Test.adapter = originalAdapter; } deepEqual(caught, thrown);