首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >修复方法: TypeError: ReactWrapper::state("<state>")要求`state`不能为`null`或`unfined`

修复方法: TypeError: ReactWrapper::state("<state>")要求`state`不能为`null`或`unfined`
EN

Stack Overflow用户
提问于 2019-05-24 12:08:33
回答 1查看 527关注 0票数 2

我正在使用酶测试一个Create-React-App中的状态。我怎样才能通过这项测试?

当我的App组件在我的测试中呈现时,它被包装在

代码语言:javascript
复制
<BrowserRouter>

(尝试以其他方式挂载它会产生

代码语言:javascript
复制
 Invariant failed: You should not use <Route> outside a <Router>

测试中的错误)。

浅包装产量

代码语言:javascript
复制
 TypeError: Cannot read property 'state' of null

安装和包装也是如此。

代码语言:javascript
复制
<BrowserRouter>.

我已经试过this

结果:问题未得到回答

this

结果:问题未得到回答

this

结果:卸载react-test-renderer没有任何区别

this

结果:我检查了我的组件中的状态,它是定义的。console.log(wrapper.instance().state)产生相同的错误:“null”

App.js:

代码语言:javascript
复制
class App extends Component {
  //#region Constructor
  constructor(props) {
    super(props);
    this.state = {
    //... other correctly formatted state variables
      specificRankingOptionBtns: false
    }

app.test.js:

代码语言:javascript
复制
import React from 'react'
import { BrowserRouter } from 'react-router-dom'
import App  from '../../App'
import renderer from 'react-test-renderer'
import { shallow, mount } from 'enzyme';

describe('App', () => {
fit('renders App.js state correctly', () => {
  const wrapper = mount(<BrowserRouter><App /></BrowserRouter>);
  //console.log(wrapper.instance().state);
  //const wrapper = shallow(<App />);
  //const wrapper = mount(<App />);
  console.log(wrapper.instance().state);
  //const wrapper = mount(shallow(<BrowserRouter><App /> 
  //</BrowserRouter>).get(0));
  expect(wrapper.state('specificRankingOptionBtns')).toEqual(false);
});
}

期望:测试通过

Actual:“ReactWrapper::state("specificRankingOptionBtns"):TypeError要求state不能为nullundefined

EN

回答 1

Stack Overflow用户

发布于 2019-06-12 19:29:43

我也有同样的问题。这对我很有效。

将{ MemoryRouter作为路由器}从‘react- Router -dom’导入;

代码语言:javascript
复制
it('should find MaskedTextInput in LoginPage', () => {
    const mountWithRouter = node => mount(<Router>{node}</Router>);
    const wrapper = mountWithRouter(<LoginPage {...mockedProps} />);
    const maskedInput = wrapper.find('MaskedTextInput');

    const componentInstance = wrapper
        .childAt(0)
        .childAt(0) 
        .instance(); // could also be instance

    const mountedState = componentInstance.state.passwordInputType;
    expect(mountedState).toEqual('password');
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56285755

复制
相关文章

相似问题

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