当前位置: 首页 > 面试题库 >

React-Jest-Enzyme:如何模拟ref属性

王建华
2023-03-14
问题内容

我正在使用ref为组件编写测试。我想模拟ref元素并更改一些属性,但不知道如何做。有什么建议?

// MyComp.jsx
class MyComp extends React.Component {
  constructor(props) {
    super(props);
    this.getRef = this.getRef.bind(this);
  }
  componentDidMount() {
    this.setState({elmHeight: this.elm.offsetHeight});
  }
  getRef(elm) {
    this.elm = elm;
  }
  render() {
    return <div>
      <span ref={getRef}>
        Stuff inside 
      </span>
    </div>
  }
}

// MyComp.test.jsx
const comp = mount(<MyComp />);
// Since it is not in browser, offsetHeight is 0
// mock ref offsetHeight to be 100 here... How to?
expect(comp.state('elmHeight')).toEqual(100);

问题答案:

根据https://github.com/airbnb/enzyme/issues/1937中的讨论,这就是解决方案

可以使用非箭头函数对类进行猴子修补,其中“ this”关键字将传递到正确的作用域。

function mockGetRef(ref:any) {
  this.contentRef = {offsetHeight: 100}
}
jest.spyOn(MyComp.prototype, 'getRef').mockImplementationOnce(mockGetRef);
const comp = mount(<MyComp />);
expect(comp.state('contentHeight')).toEqual(100);


 类似资料:
  • 问题内容: 我的测试目标中当前已导入: 并在我的相同测试目标中使用它: 在测试中,我正在做以下模拟尖锐函数的操作: 但我得到: 有没有一种方法可以使用带有Jest的功能模拟所有Sharp模块功能? 问题答案: 您需要像这样模拟它: 首先,您需要返回function而不是对象,因为您需要调用。该函数调用将返回带有键的对象,该键包含另一个函数,依此类推。 要测试每个功能,您需要为每个功能创建一个间谍。

  • 问题内容: 我开始认为这是不可能的,但是无论如何我都想问。 我想测试我的一个ES6模块以特定方式调用另一个ES6模块。有了茉莉花,这非常容易- 应用程式码: 和测试代码: 笑话相当于什么?我觉得这是一件很想做的简单的事,但是我一直在努力尝试弄清头发。 我最接近的是将s 替换为s,并将其移入测试/函数中。都不是我想做的事情。 为了获得加分,我希望在其中的功能为默认导出时使整个工作正常进行。但是,我知

  • 我使用moment.js在React组件的辅助文件中执行大部分日期逻辑,但我还没有弄清楚如何在Jest a la中模拟日期。 Jest文档只介绍计时器函数,如,等,但不帮助设置日期,然后检查my date函数是否完成了它们的任务。 以下是我的一些JS文件: 下面是我用玩笑设置的: 现在这些测试通过了,因为我使用的是矩,我的函数使用的是矩,但它似乎有点不稳定,我想为测试设置一个固定的时间。 你知道怎

  • 我试图为这样的函数编写一个单元测试: 为了测试这段代码,我需要模拟服务,因为它调用类外的函数,但问题是它是私有的。 我该如何用玩笑来模拟一个私有变量呢?这个类创建了它自己的实例,所以甚至可以模仿它吗?

  • 问题内容: React v15.1.0 Jest v12.1.1 Enzyme v2.3.0 我试图弄清楚如何测试通过单击调用的函数中调用promise的组件。我期望Jest的功能可以在这里为我提供帮助,但似乎并没有执行承诺。 零件: 和测试: 问题答案: 在结束测试之前,不需要太多等待等待的承诺。从您可以看到的代码中,有两种主要的实现方法。 独立测试和您的诺言方法。因此,请检查是否调用了正确的函

  • 问题内容: 我有一个React组件,其中包含一些其他组件,这些组件依赖于对Redux存储等的访问,这会在执行完整的酶安装时引起问题。假设这样的结构: 我想使用Jest的方法来模拟子组件,因此测试无需担心。 我知道我可以通过以下方式模拟出一个简单的组件: 但是,由于该组件通常会接收道具,因此React会感到不安,并发出有关将未知道具(在本例中为)传递给的警告。 我试图返回一个函数,但是由于悬挂了,所