测试异步反应组件的最佳方法是什么
What is the best way for testing asynchronous react component
我想在使用 mocha 的反应中测试登录组件
const loginView = require('./index');
const React = require('react');
const ReactDOM = require('react-dom');
const ReactTestUtils = require('react-addons-test-utils');
const chai = require('chai');
const jsdom = require('mocha-jsdom');
const injectTapEventPlugin = require('react-tap-event-plugin');
const nock = require('nock');
const api = require('../../configuration').api;
injectTapEventPlugin();
chai.should();
describe('login', () => {
beforeEach(() => {
jsdom();
});
it('show error dialog when username or password is invalid', (done) => {
const login = ReactTestUtils.renderIntoDocument(React.createElement(loginView));
nock(api).post('user/access-token').reply(200);
login.setState({
email: 'test@email.tld',
password: 'wrong-password'
});
ReactTestUtils.Simulate.touchTap(ReactDOM.findDOMNode(login.refs.signin).firstChild);
setTimeout(() => {
login.state.showErrorDialog.should.equal(true);
login.setState({
showErrorDialog: false
});
done();
}, 1500);
});
});
单击登录按钮时,ajax 请求检查用户名和密码(使用超级代理)。
问题是我不想使用 setTimeout 函数,我喜欢在 ajax 请求完成时使用回调或承诺。可能吗?
似乎使用 setTimeout
和 done
是目前解决此问题的最简单方法。
我唯一要更改的是删除 1500 毫秒延迟,这是不必要的,因为节点是单线程。
我想在使用 mocha 的反应中测试登录组件
const loginView = require('./index');
const React = require('react');
const ReactDOM = require('react-dom');
const ReactTestUtils = require('react-addons-test-utils');
const chai = require('chai');
const jsdom = require('mocha-jsdom');
const injectTapEventPlugin = require('react-tap-event-plugin');
const nock = require('nock');
const api = require('../../configuration').api;
injectTapEventPlugin();
chai.should();
describe('login', () => {
beforeEach(() => {
jsdom();
});
it('show error dialog when username or password is invalid', (done) => {
const login = ReactTestUtils.renderIntoDocument(React.createElement(loginView));
nock(api).post('user/access-token').reply(200);
login.setState({
email: 'test@email.tld',
password: 'wrong-password'
});
ReactTestUtils.Simulate.touchTap(ReactDOM.findDOMNode(login.refs.signin).firstChild);
setTimeout(() => {
login.state.showErrorDialog.should.equal(true);
login.setState({
showErrorDialog: false
});
done();
}, 1500);
});
});
单击登录按钮时,ajax 请求检查用户名和密码(使用超级代理)。
问题是我不想使用 setTimeout 函数,我喜欢在 ajax 请求完成时使用回调或承诺。可能吗?
似乎使用 setTimeout
和 done
是目前解决此问题的最简单方法。
我唯一要更改的是删除 1500 毫秒延迟,这是不必要的,因为节点是单线程。