Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 如何测试componentDidMount中是否调用了特定的操作?_Unit Testing_Reactjs_Redux_Mocha.js_Sinon - Fatal编程技术网

Unit testing 如何测试componentDidMount中是否调用了特定的操作?

Unit testing 如何测试componentDidMount中是否调用了特定的操作?,unit-testing,reactjs,redux,mocha.js,sinon,Unit Testing,Reactjs,Redux,Mocha.js,Sinon,我在我的项目中使用Redux,测试堆栈的是Mocha、Chai和Sinon。在特定容器组件中,ABC的组件装载一个动作xyz。在ABC的单元测试中,我想检查是否调用了xyz。ABC的代码 import {xyz} from 'action'; class ABC extends React.Component { componentDidMount(){ // some other magic this.props.xyz(); } render(){ //

我在我的项目中使用Redux,测试堆栈的是Mocha、Chai和Sinon。在特定容器组件中,ABC的组件装载一个动作xyz。在ABC的单元测试中,我想检查是否调用了xyzABC的代码

import {xyz} from 'action';
class ABC extends React.Component {
   componentDidMount(){
   // some other magic
   this.props.xyz();
   }
   render(){
   // return html
   }
}
function mapDispatchToProps(dispatch) {
       return bindActionCreators({xyz});  
 } 
export default connect(mapStateToProps, mapDispatchToProps)(ABC)
检查是否从失败的componentDidMount调用xyz的单元测试

import {xyz} from 'path to xyz action';
import {ABC} from 'path to ABC';
import {Provider} from 'react-redux'
describe('ABC', function () {
     it('renders correctly', function () {
           let store = {} // fake store object
           let actionSpy = sinon.spy(xyz);
           let wrapper = mount(
            <Provider store={store}
              <ABC/>
            </Provider>);
           actionSpy.should.have.callCount(1);
    });
});
从'path to xyz action'导入{xyz};
从'path to ABC'导入{ABC};
从“react redux”导入{Provider}
描述('ABC',功能(){
它('正确呈现',函数(){
let store={}//伪存储对象
设actionSpy=sinon.spy(xyz);
让包装器=装入(

好吧,假设您正在导入组件的未包装版本,那么您根本没有传递任何道具(商店没有向您的组件中注入道具)。因此,您应该将该间谍传递给您的组件:

mount(<ABC xyz={actionSpy} />);
mount();

之后应该可以用了!

我试过了,它不起作用,我没有导入组件的未包装版本。我明白了,那么你什么也不导入,因为你有
import{ABC}从'path to ABC';
这是一个命名的导入。如果您要导出未包装的组件,那么您可能会有更好的运气。无论如何,这是测试redux组件的一个好模式。有可能您正在导入已包装的组件,而存储正在覆盖您传递的道具。如何为已包装的组件执行此操作?请简短回答回答?你不能。包装的组件将直接通过绑定动作创建者,这意味着你不能在那里设置间谍。