你能说出为什么这个Jest测试失败了ReactJS吗?我正在尝试测试我的顶级React组件App
:
错误: 运行时错误 - 不变违规:_registerComponent(...):目标容器不是DOM元素。 at invariant(node_modules / react / node_modules / fbjs / lib / invariant.js:38:15)
app.js
// ./app.js
var React = require('react');
var ReactDOM = require('react-dom');
import Howdy from './app/Howdy';
export default class App extends React.Component {
render() {
return (
<div>
Hello
</div>
);
}
};
ReactDOM.render(
<App />,
document.getElementById('app')
);
应用-test.js
// __tests__/app-test.js
jest.unmock('../app');
import React from 'react';
import ReactDOM from 'react-dom';
import TestUtils from 'react-addons-test-utils';
import App from '../app';
describe('Test App Component', () => {
it('sample test...', () => {
const myApp = TestUtils.renderIntoDocument(
<App />
);
const myAppNode = ReactDOM.findDOMNode(myApp);
expect(myAppNode.isElement).toEqual(true);
});
});
答案 0 :(得分:0)
const myApp = TestUtils.renderIntoDocument(
<App />
在上面的块中使用let
代替const
。
const
表示无法重新分配标识符。 (不要与不可变值混淆。与真正的不可变数据类型(如Immutable.js和Mori生成的数据类型)不同,const
对象可以使属性发生变异。) 如果我不需要重新分配,const
是let
的默认选择,因为我希望代码中的使用尽可能清晰。 当我需要重新分配变量时,我使用let
。因为我使用一个变量来表示一个事物,let
的用例往往是循环或数学算法。 我不在ES6中使用var
。循环的块范围有价值,但我想不出我希望var
超过let
的情况。