Как стать автором
Обновить

Комментарии 6

А почему не используете assignAll из redux-act, используете SSR?
Я вот написал к redux-act расширение, так dispatch вообще не нужен теперь

SSR использую в полный рост, только не понял, к чему этот уточняющий вопрос — assignAll не работает на сервере?


Я отказался совсем от биндинга экшенов, не использую mapDispatchToProps, наоборот предпочитаю явно дергать dispatch(), но в результате боевой код имеет много лишнего:


interface IOwnProps {}

interface IConnectedState {
  router: RouterState;
}

interface IConnectedDispatch {
  dispatch: Dispatch<IStoreState>;
}

type IProps = IOwnProps & IConnectedState & IConnectedDispatch;

interface IState {}

const mapStateToProps = (state: IStoreState) => ({
  router: state.router,
});

const WrappedUser = connect<IConnectedState, IConnectedDispatch, IOwnProps>(mapStateToProps)(
  class User extends React.Component<IProps, IState> {
    componentDidMount() {
      this.props.dispatch(myAction())
    }
    //...
  }
)

export default WrappedUser;

Спасибо, записал в блокнотик "подумать, как спрятать dispatch". Только оно должно работать с redux-thunk и redux-saga.

assignAll (и bindAll) не работает с SSR, да.
Если использовать либу, что я указал выше, thunk не нужен :)
C сагами не подскажу, но зачем они, если уже есть redux-act?

Я описал выше вариант "тесты после кода", когда интересно увидеть только общую картину. Но когда TDD, и тесты нужны на каждый чих, то в сагах детализация глубже.

Люди, остановитесь! Зачем вы пишете столько запутанного кода, называя его "легко тестируемым"? Вы где-то потеряли простоту и элегантность яваскрипта. Смотрите, весь код из статьи можно было бы переписать так:


Код неблокирующей загрузки данных в зависимости от адресной строки:


export class $my_app extends $mol_view {

    post_id() {
        return $mol_state_arg.sub().value()
    }

    post() {
        return $mol_http.resource( `/posts/${ this.post_id() }` ).json()
    }

    comments() {
        return $mol_http.resource( `/comments?postId=${ this.post_id() }` ).json()
    }

}

Ну и тест на это дело:


$mol_test({

    'Load post and comments'() {

        const app = new $my_app
        const arg = $mol_state_arg.sub()
        const post = $mol_http.resource( `/posts/1` )
        const comments = $mol_http.resource( `/comments?postId=1` )

        try {

            arg.value = ()=> '1'

            post.json = ()=> ({
                userId: 1,
                id: 1,
                title: 'title',
                body: 'body',
            })

            comments.json = ()=> ([
                {
                    postId: 1,
                    id: 1,
                    name: 'name',
                    email: 'email@example.com',
                    body: 'body',
                },
            ])

            $mol_assert_like( app.post() , comments.post() )
            $mol_assert_like( app.comments() , comments.json() )

        } finally {

            delete arg.value
            delete post.json
            delete comments.json

        }

    }

})

Хотя смысла тестировать столь простую логику я не вижу.

Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории