【问题标题】:Enzyme shallow rendering: unable to trigger/assert value change when using 'simulate'酶浅渲染:使用“模拟”时无法触发/断言值更改
【发布时间】:2017-08-10 15:51:50
【问题描述】:

我很难弄清楚如何断言我可以在我的应用程序的输入字段中输入文本。在浏览器中,会发生预期的行为,即当我选择文本并开始输入时,文本会出现在输入中。然而,在我的测试中,期望收到的是“未定义”,而不是像希望的那样返回“a”。

这是我的测试:

import React from 'react'
import { shallow } from 'enzyme';
import Search from './search';

describe('Search', () => {

  const wrapper = shallow(<Search />);

  it('renders without crashing', () => {
    shallow(<Search />);
  });

  it('accepts text in an input', () => {
    const input = wrapper.find('input');
    input.simulate('change', { target: { value: 'a' } });
    expect(input.props().value).toEqual('a');
  });
});

以及实现:

import React, { Component } from 'react';

class Search extends Component {
  constructor(props) {
    super(props);
    this.state = {
      searchText: "Roi"
    };
  }

  inputUpdate (event) {
    this.setState({ searchText: event.target.value});
  }

  render() {
    return(
      <form>
        <input type="text"
               className="card-search"
               placeholder="Type card name"
               onChange={ this.inputUpdate.bind(this) }
               value={ this.state.searchText }/>
      </form>
    );
  };
};

export default Search;

这让我发疯了,我确定我错过了一些简单的东西。谁能帮我解释一下?

【问题讨论】:

  • 试试input.get(0).value
  • 嗨 dcodesmith - 感谢您回复我。我假设您的意思是:expect(input.get(0).value).toEqual('a'); - 遗憾地返回相同的“未定义”。
  • 尝试记录input.get(0)。让我们看看那里有没有什么。
  • 该对象中有一个 props().value"Roi"

标签: reactjs enzyme jestjs


【解决方案1】:

我不知道为什么会这样,但似乎是这样......

改变

expect(input.props().value).toEqual('a');

expect(wrapper.find('input').props().value).toEqual('a');

【讨论】:

  • 太棒了,谢谢 dcodesmith!现在我需要深入研究并弄清楚 为什么 有效!
  • @xiola,您能否将其标记为解决方案,也许? :) 另外,我只是没有时间深入研究为什么会这样。我确定这是有原因的。
  • 对不起,S.O.小白。再次感谢!
  • 没关系。欢迎来到 SO ;)
【解决方案2】:

您的inputUpdate 不会更新您的组件状态。试试这个:

inputUpdate (e) {
    this.setState({
        searchText: e.target.value
    });
}

【讨论】:

  • 感谢 Gustavo,我粘贴了错误的实现版本。现在更新了,问题还是和原来说的一样。
猜你喜欢
  • 1970-01-01
  • 2017-10-20
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 2019-04-16
  • 1970-01-01
  • 2020-08-26
  • 2019-04-16
相关资源
最近更新 更多