无法对 moct 商店摩卡酶进行测试

问题描述 投票:0回答:1

我正在尝试测试按钮是否调度操作,但我得到的是 [],而不是操作类型。该功能在测试之外完全正常工作,这就是为什么我不明白为什么测试失败。

我的测试:

const mockStore = configureStore();
const store = mockStore({});

describe('buttonUploadWorks', () => {
  it('checks if the button for upload dispatches an action', () => {
    const wrapper = shallow(
      <Provider store = {store}>
        <DropzoneComponent.WrappedComponent/>
      </Provider>).dive();
    const uploadButton = wrapper.find('button').at(0);
    uploadButton.simulate('onClickUpload');
    const expectedAction = UPLOAD_STARTING;
    wrapper.setState({ accepted: ['abc'] });
    const action = store.getActions();
      expect(action).to.equal(expectedAction);
  });
});

我的行动:

export const uploadStarting = () => {
  return {type: UPLOAD_STARTING};
};

export const uploadSuccess = uploadMessage => {
  return {type: UPLOAD_SUCCESS, uploadMessage};
};

export const uploadFail = error => {
  return {type: UPLOAD_FAIL, error};
};

export function tryUpload (file) {
  const formData = new FormData();
  formData.append('file', file);
  return (dispatch) => {
    dispatch(uploadStarting());
    axios.post(filesEndpoint, formData).then(function (response) {
      dispatch(uploadSuccess(response));
    }).catch(function (error) {
      dispatch(uploadFail(error));
    });
  };
};

还有按钮:

    <button className='buttonUpload' onClick={() => { this.state.accepted.length > 0 ? this.onClickUpload().bind(this) : alert('No files presented'); }}>UPLOAD</button>

onClickUpload() {
    this.props.dispatch(tryUpload(this.state.accepted[0]));
    localStorage.clear();
    this.setState({accepted: []});
    this.props.history.push(searchPath);
  }
reactjs testing react-redux mocha.js enzyme
1个回答
0
投票

发生这种情况是因为:

setState({accepted:[]})

触发之前:

this.props.dispatch(tryUpload(this.state.accepted[0]))

您可以通过将

dispatch
函数绑定到
Promise
函数
中,然后调用
setState
函数来修复此问题。

© www.soinside.com 2019 - 2024. All rights reserved.