2016-08-04 2 views
0

Say У меня есть Redux подключенный реагировать компонент, как это:Лучший способ проверить Redux действия отказа в Redux приложения

class App extends Component { 
    renderErrorMessage() { 
    const { errorMessage } = this.props; 

    if(!errorMessage) { 
     return; 
    } 

    // render error message 
    } 

    render() { 
    return (
     <div> 
      <Menu location={this.props.location.pathname}/> 
      <div className="jumbotron"> 
      { this.renderErrorMessage() } 
      { this.props.children } 
      </div> 
     </div> 
    ); 
    } 
}; 

function mapStateToProps(state) { 
    return { 
    errorMessage: state.get('errorMessage') 
    }; 
}; 

App.propTypes = { 
    errorMessage: PropTypes.string, 
    children: PropTypes.node, 
    resetErrorMessage: PropTypes.func.isRequired 
}; 

export default connect(mapStateToProps, { 
    resetErrorMessage 
})(App); 

И у меня есть действие отказа, как:

export function fetchResultsFailure(error) { 
    return { 
    type: FETCH_RESULTS_FAILURE, 
    error 
    } 
} 

И мой редуктор выглядит так:

function errorMessage(state = null, action) { 
    const { type, error } = action; 

    if(type === ActionTypes.RESET_ERROR_MESSAGE) { 
    return null; 
    } else if (error) { 
    return action.error; 
    } 

    return state; 
}; 

Я использую это с помощью redux-saga и можно назвать состояние отказа например:

function* fetchEntity(entity, apiFn) { 
    yield put(entity.request()); 
    const { response, error } = yield call(apiFn); 

    if(response) { 
    yield put(entity.success(response)); 
    } else { 
    console.log(error); 
    yield put(entity.failure(error)); 
    } 

}; 

Как я могу проверить это? Я хотел бы протестировать этот конец до конца и вернуть сообщение об ошибке

+0

Вы имеете в виду единичный тест? – Vivian

ответ

0

Во-первых, вы должны единичный тест отдельных компонентов. Например. убедитесь, что если вы передадите свой компонент ошибке prop, он отобразит его.

Во-вторых, от конца до конца тестирование - это тестирование всего приложения. Поэтому, чтобы проверить, работает ли ошибка при сквозном тестировании, вам нужно выяснить, что может привести к ошибке (например, к базе данных) и реплицировать это (отключите сервер базы данных :)).

Вы можете заглушить/изручить различные интерфейсы (например, перехватывать сетевые запросы, чтобы вызвать ошибку) и ускорить тесты.

Для всего этого вы, вероятно, захотите автоматизировать его с чем-то вроде selenium.

И, наконец, мое мнение состоит в том, что вам не нужно единично тестировать материал, который не является вашим кодом. То есть вам не нужно проверять, что Redox's connect делает то, что он говорит, что вам нужно, вам не нужно проверять, что ваши компоненты импортируют нужные модули и т. Д. Это может показаться очевидным, но я думаю, как только вы перестанете думать о мульти -модуль тестирует, тем легче ваши тесты будут.

Смежные вопросы