diff --git a/package.json b/package.json index 439fc30465..2b637f68c6 100644 --- a/package.json +++ b/package.json @@ -109,6 +109,7 @@ "karma-mocha": "^0.2.2", "karma-sourcemap-loader": "^0.3.7", "karma-webpack": "^1.7.0", + "matrix-react-test-utils": "^0.1.1", "mocha": "^2.4.5", "parallelshell": "^1.2.0", "react-addons-test-utils": "^15.4.0", diff --git a/test/components/views/dialogs/InteractiveAuthDialog-test.js b/test/components/views/dialogs/InteractiveAuthDialog-test.js index c8f16225de..ecfaba4e2c 100644 --- a/test/components/views/dialogs/InteractiveAuthDialog-test.js +++ b/test/components/views/dialogs/InteractiveAuthDialog-test.js @@ -20,6 +20,7 @@ import React from 'react'; import ReactDOM from 'react-dom'; import ReactTestUtils from 'react-addons-test-utils'; import sinon from 'sinon'; +import MatrixReactTestUtils from 'matrix-react-test-utils'; import sdk from 'matrix-react-sdk'; import MatrixClientPeg from '../../../../src/MatrixClientPeg'; @@ -47,7 +48,7 @@ describe('InteractiveAuthDialog', function () { sandbox.restore(); }); - it('Should successfully complete a password flow', function(done) { + it('Should successfully complete a password flow', function() { const onFinished = sinon.spy(); const doRequest = sinon.stub().returns(q({a:1})); @@ -69,7 +70,7 @@ describe('InteractiveAuthDialog', function () { />, parentDiv); // wait for a password box and a submit button - test_utils.waitForRenderedDOMComponentWithTag(dlg, "form").then((formNode) => { + return MatrixReactTestUtils.waitForRenderedDOMComponentWithTag(dlg, "form", 2).then((formNode) => { const inputNodes = ReactTestUtils.scryRenderedDOMComponentsWithTag( dlg, "input" ); @@ -113,6 +114,6 @@ describe('InteractiveAuthDialog', function () { }).then(() => { expect(onFinished.callCount).toEqual(1); expect(onFinished.calledWithExactly(true, {a:1})).toBe(true); - }).done(done, done); + }); }); }); diff --git a/test/test-utils.js b/test/test-utils.js index 569208b355..bc6b484bb5 100644 --- a/test/test-utils.js +++ b/test/test-utils.js @@ -2,52 +2,12 @@ import sinon from 'sinon'; import q from 'q'; -import ReactTestUtils from 'react-addons-test-utils'; import peg from '../src/MatrixClientPeg'; import dis from '../src/dispatcher'; import jssdk from 'matrix-js-sdk'; const MatrixEvent = jssdk.MatrixEvent; -/** - * Wrapper around window.requestAnimationFrame that returns a promise - * @private - */ -function _waitForFrame() { - const def = q.defer(); - window.requestAnimationFrame(() => { - def.resolve(); - }); - return def.promise; -} - -/** - * Waits a small number of animation frames for a component to appear - * in the DOM. Like findRenderedDOMComponentWithTag(), but allows - * for the element to appear a short time later, eg. if a promise needs - * to resolve first. - * @return a promise that resolves once the component appears, or rejects - * if it doesn't appear after a nominal number of animation frames. - */ -export function waitForRenderedDOMComponentWithTag(tree, tag, attempts) { - if (attempts === undefined) { - // Let's start by assuming we'll only need to wait a single frame, and - // we can try increasing this if necessary. - attempts = 1; - } else if (attempts == 0) { - return q.reject("Gave up waiting for component with tag: " + tag); - } - - return _waitForFrame().then(() => { - const result = ReactTestUtils.scryRenderedDOMComponentsWithTag(tree, tag); - if (result.length > 0) { - return result[0]; - } else { - return waitForRenderedDOMComponentWithTag(tree, tag, attempts - 1); - } - }); -} - /** * Perform common actions before each test case, e.g. printing the test case * name to stdout.