Merge pull request #1211 from matrix-org/rav/use_react_test_utils

Use matrix-react-test-utils rather than our own impl
This commit is contained in:
David Baker 2017-07-12 16:44:25 +01:00 committed by GitHub
commit 3093f2d6fb
3 changed files with 5 additions and 43 deletions

View file

@ -109,6 +109,7 @@
"karma-mocha": "^0.2.2", "karma-mocha": "^0.2.2",
"karma-sourcemap-loader": "^0.3.7", "karma-sourcemap-loader": "^0.3.7",
"karma-webpack": "^1.7.0", "karma-webpack": "^1.7.0",
"matrix-react-test-utils": "^0.1.1",
"mocha": "^2.4.5", "mocha": "^2.4.5",
"parallelshell": "^1.2.0", "parallelshell": "^1.2.0",
"react-addons-test-utils": "^15.4.0", "react-addons-test-utils": "^15.4.0",

View file

@ -20,6 +20,7 @@ import React from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import ReactTestUtils from 'react-addons-test-utils'; import ReactTestUtils from 'react-addons-test-utils';
import sinon from 'sinon'; import sinon from 'sinon';
import MatrixReactTestUtils from 'matrix-react-test-utils';
import sdk from 'matrix-react-sdk'; import sdk from 'matrix-react-sdk';
import MatrixClientPeg from '../../../../src/MatrixClientPeg'; import MatrixClientPeg from '../../../../src/MatrixClientPeg';
@ -47,7 +48,7 @@ describe('InteractiveAuthDialog', function () {
sandbox.restore(); sandbox.restore();
}); });
it('Should successfully complete a password flow', function(done) { it('Should successfully complete a password flow', function() {
const onFinished = sinon.spy(); const onFinished = sinon.spy();
const doRequest = sinon.stub().returns(q({a:1})); const doRequest = sinon.stub().returns(q({a:1}));
@ -69,7 +70,7 @@ describe('InteractiveAuthDialog', function () {
/>, parentDiv); />, parentDiv);
// wait for a password box and a submit button // 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( const inputNodes = ReactTestUtils.scryRenderedDOMComponentsWithTag(
dlg, "input" dlg, "input"
); );
@ -113,6 +114,6 @@ describe('InteractiveAuthDialog', function () {
}).then(() => { }).then(() => {
expect(onFinished.callCount).toEqual(1); expect(onFinished.callCount).toEqual(1);
expect(onFinished.calledWithExactly(true, {a:1})).toBe(true); expect(onFinished.calledWithExactly(true, {a:1})).toBe(true);
}).done(done, done); });
}); });
}); });

View file

@ -2,52 +2,12 @@
import sinon from 'sinon'; import sinon from 'sinon';
import q from 'q'; import q from 'q';
import ReactTestUtils from 'react-addons-test-utils';
import peg from '../src/MatrixClientPeg'; import peg from '../src/MatrixClientPeg';
import dis from '../src/dispatcher'; import dis from '../src/dispatcher';
import jssdk from 'matrix-js-sdk'; import jssdk from 'matrix-js-sdk';
const MatrixEvent = jssdk.MatrixEvent; 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 * Perform common actions before each test case, e.g. printing the test case
* name to stdout. * name to stdout.