测试组件行为(单击)与开玩笑的反应



假设我有此组件:

import React, { Component } from 'react';
import { Text, TouchableWithoutFeedback, View } from 'react-native';
class MyComp extends Component {
  onRowPress() {
    this.myCoolFunction();
  }
  myCoolFunction() { 
    console.log('hi'); 
  }
  render() {
    return (
      <TouchableWithoutFeedback onPress={this.onRowPress.bind(this)}>
        <View>
          <Text>Hello World</Text>
        </View>
      </TouchableWithoutFeedback>
    );
  }
}
export default MyComp;

我该如何模拟1个单击" touchableWithOutFeedback"并确保" mycoolfunction"被称为1次?

如果不是必须的,那么我宁愿不添加更多的依赖项,而不是" react-dom"one_answers" react-addons-test-utils"。

我看到了很多指南,但我担心它们已经过时了,我想确保我不会经历一些不需要的解决方法并膨胀我的代码。

我在其最新版本中有开玩笑/react/react本地人。

编辑:在开玩笑的官方文档中,它说可以使用酶或测试作用进行DOM测试。如何使用Testutils完成此操作?

我知道这个答案并不适应您不使用任何其他依赖项的要求,但是我认为您不能仅用开玩笑和酶做到这一点。Jest为您提供跑步者,断言功能和快照测试,并且酶可以进行所有DOM操作和事件模拟。但是,要知道您的功能被完全调用了一次,您将需要其他东西(即间谍)。我们为此使用sinon,例如:

...
const onButtonClick = sinon.spy()
const wrapper = shallow(<MyComponent onButtonClick={onButtonClick}/>)
wrapper.find(`img`).first().simulate(`click`)
wrapper.find(`img`).first().simulate(`click`)
expect(onButtonClick.calledTwice).toBe(true)
...

我知道您不想添加其他依赖项,但是在下划线库中有一个函数,称为

创建一个只能一次称为一次的函数的版本。对修改功能的重复调用将无效,从原始调用中返回值。

这样,您将确定它被称为一次。

最新更新