Не работают тесты для магазина Mocha Enzyme - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь проверить, отправляет ли кнопка действие, но вместо типа действия я получаю [].Функциональность полностью работает вне теста, поэтому я не понимаю, почему тест не пройден.

Мой тест:

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);
  }

1 Ответ

0 голосов
/ 26 августа 2018

Это происходит потому, что setState ({accept: []}) срабатывает перед this.props.dispatch (tryUpload (this.state.accepted [0])), вы можете исправить это, связав функцию отправки внутри функции обещания, а затем вызвав Функция setState. Обещания JavaScript

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...