React 16 State Testing

时间:2018-05-07 23:20:44

标签: javascript reactjs

我有一个React.js应用程序是一个简单的购物车应用程序。 https://codesandbox.io/s/znvk4p70xl

问题是我正在尝试使用stateJest对应用程序的Enzyme进行单元测试,但它似乎不起作用。这是我的Todo.test.js单元测试:

import React from 'react';
import { shallow } from 'enzyme';
import Todo from '../components/Todo';

import { configure } from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';

configure({ adapter: new Adapter() });

test('Test it', async () => {
  // Render a checkbox with label in the document
  const cart = [
    { name: 'Green', cost: 4 },
    { name: 'Red', cost: 8 },
    { name: 'Blue', cost: 14 }
  ];
  const wrapper = shallow(<Todo cart={cart} />);
  const firstInput = wrapper.find('input').at(0);
  firstInput.simulate('change', { target: { value: 'Pink' } });

  const firstCost = wrapper.find('input').at(1);
  firstCost.simulate('change', { target: { value: 200 } });

  const submitButton = wrapper.find('button').at(0);
  submitButton.simulate('click');

  console.log(wrapper.state());
});

最后的console.log0。这很奇怪,因为即使在点击0之后 也应该<{1}}。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

根据我的理解,您的点击代码没有设置任何状态,它只是 更新变量{totalCost},因为您应该更新状态 为了获得更新状态值。

OR

您可以通过首先更新测试类中的状态来检查是否 你的州更新与否:

wrapper.setState({
     totalCost: 20
});

让我知道你的想法。