我有一个带有以下组件的最小测试react应用程序:
import React from 'react';
import $ from 'jquery';
export default class App extends React.Component {
componentDidMount() {
console.log('componentDidMount', $('#helloDiv').length);
}
render() {
return <div id='helloDiv'>
Hello React!
</div>;
}
}
在浏览器(Chrome)中加载它时效果很好。componentDidMount() 中的 console.log() 打印出找到的 1 helloDiv 元素
但是,如果我使用 mocha + 酶 + jsdom 运行测试,App 组件中相同的 console.log() 会打印出 0:
import React from 'react';
import { mount } from 'enzyme';
import { expect } from 'chai';
import App from '../src/client/app/first'
describe('first test', () => {
it('should pass', () => {
const app = mount(<App />);
expect(app.find('#helloDiv').length).to.eq(1);
});
});
注意:我对这个单元测试没有问题,它通过了。真正的问题是当 < App /> 使用酶挂载时,componentDidMount() 被调用,但其中的 console.log() 语句打印出 0,而不是 1
这是我运行摩卡咖啡的方式:
mocha --require enzyme/withDom --compilers js:babel-core/register test/index.test.js
知道为什么 jquery 选择器在测试中找不到任何东西吗?这不应该是 mocha 问题,因为如果我换成 jest 也会发生同样的问题