diff --git a/packages/ember-testing/lib/test/promise.js b/packages/ember-testing/lib/test/promise.js index a5e2624017e..81a78a95846 100644 --- a/packages/ember-testing/lib/test/promise.js +++ b/packages/ember-testing/lib/test/promise.js @@ -9,8 +9,10 @@ export default class TestPromise extends RSVP.Promise { lastPromise = this; } - then(onFulfillment, ...args) { - return super.then(result => isolate(onFulfillment, result), ...args); + then(_onFulfillment, ...args) { + let onFulfillment = typeof _onFulfillment === 'function' ? + result => isolate(_onFulfillment, result) : undefined; + return super.then(onFulfillment, ...args); } } diff --git a/packages/ember-testing/tests/ext/rsvp_test.js b/packages/ember-testing/tests/ext/rsvp_test.js index 24eeae51c41..4d4f817650c 100644 --- a/packages/ember-testing/tests/ext/rsvp_test.js +++ b/packages/ember-testing/tests/ext/rsvp_test.js @@ -1,5 +1,6 @@ import RSVP from '../../ext/rsvp'; import { getAdapter, setAdapter } from '../../test/adapter'; +import TestPromise, { getLastPromise } from '../../test/promise'; import { run } from 'ember-metal'; import { isTesting, setTesting } from 'ember-debug'; @@ -84,3 +85,35 @@ QUnit.test('given `Ember.testing = true`, correctly informs the test suite about equal(asyncEnded, 2); }); }); + + +QUnit.module('TestPromise'); + +QUnit.test('does not throw error when falsy value passed to then', function() { + expect(1); + return new TestPromise(function(resolve) { + resolve() + }) + .then(null) + .then(function() { + ok(true); + }); +}); + +QUnit.test('able to get last Promise', function() { + expect(2); + + var p1 = new TestPromise(function(resolve) { + resolve() + }) + .then(function() { + ok(true); + }); + + var p2 = new TestPromise(function(resolve) { + resolve() + }); + + deepEqual(getLastPromise(), p2); + return p1; +});