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:
commit
3093f2d6fb
3 changed files with 5 additions and 43 deletions
|
@ -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",
|
||||||
|
|
|
@ -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);
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -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.
|
||||||
|
|
Loading…
Reference in a new issue