首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用react-test-renderer的Jest快照测试中,引用为空

在使用react-test-renderer的Jest快照测试中,引用为空
EN

Stack Overflow用户
提问于 2016-11-29 03:36:46
回答 2查看 12.4K关注 0票数 19

目前我正在手动初始化componentDidMount上的Quill编辑器,jest测试对我来说失败了。看起来我得到的ref值在jsdom中是空的。这里有一个问题:https://github.com/facebook/react/issues/7371,但看起来refs应该可以工作。你知道我应该检查什么吗?

组件:

代码语言:javascript
复制
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';

class App extends Component {

  componentDidMount() {
    console.log(this._p)
  }
  
  render() {
    return (
      <div className="App">
        <div className="App-header">
          <img src={logo} className="App-logo" alt="logo" />
          <h2>Welcome to React</h2>
        </div>
        <p className="App-intro" ref={(c) => { this._p = c }}>
          To get started, edit <code>src/App.js</code> and save to reload.
        </p>
      </div>
    );
  }
}

测试:

代码语言:javascript
复制
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import renderer from 'react-test-renderer'

it('snapshot testing', () => {
    const tree = renderer.create(
        <App />
    ).toJSON()
    expect(tree).toMatchSnapshot()  
})

因此,console.log输出null。但我希望P标签

EN

回答 2

Stack Overflow用户

发布于 2016-11-29 06:11:22

因为测试渲染器没有耦合到React DOM,所以它不知道refs应该是什么样子的。React 15.4.0添加了为测试渲染器模拟refs的能力,但您应该自己提供这些模拟。React 15.4.0 release notes提供了一个这样做的例子。

代码语言:javascript
复制
import React from 'react';
import App from './App';
import renderer from 'react-test-renderer';

function createNodeMock(element) {
  if (element.type === 'p') {
    // This is your fake DOM node for <p>.
    // Feel free to add any stub methods, e.g. focus() or any
    // other methods necessary to prevent crashes in your components.
    return {};
  }
  // You can return any object from this method for any type of DOM component.
  // React will use it as a ref instead of a DOM node when snapshot testing.
  return null;
}

it('renders correctly', () => {
  const options = {createNodeMock};
  // Don't forget to pass the options object!
  const tree = renderer.create(<App />, options);
  expect(tree).toMatchSnapshot();
});

请注意,它只适用于React 15.4.0和更高版本的的

票数 41
EN

Stack Overflow用户

发布于 2019-07-06 09:17:32

我使用这个repo中的基于酶的测试来解决这个问题,如下所示:

代码语言:javascript
复制
import { shallow } from 'enzyme'
import toJson from 'enzyme-to-json'

describe('< SomeComponent />', () => {
  it('renders', () => {

    const wrapper = shallow(<SomeComponent />);

    expect(toJson(wrapper)).toMatchSnapshot();
  });
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40852131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档