gpt4 book ai didi

javascript - 使用 Jest Enzyme 测试 React Reducer

转载 作者:行者123 更新时间:2023-12-02 20:58:55 25 4
gpt4 key购买 nike

我的 react 应用程序中有一个像这样的 reducer 。我的 react 应用程序中有一个这样的 reducer 。我的 react 应用程序中有一个这样的 reducer 。我的 react 应用程序中有一个这样的 reducer 。我的 react 应用程序中有一个这样的 reducer 。我的 react 应用程序中有一个这样的 reducer 。我的 react 应用程序中有一个这样的 reducer 。我的 react 应用程序中有一个这样的 reducer 。我的 React 应用程序中有一个这样的 reducer 。

reducer .ts

import React, { useEffect } from 'react'
import PropTypes from 'prop-types'

import FormField from 'wf-dbd-react-ui/es/FormField'
import FormFieldLabel from 'wf-dbd-react-ui/es/FormFieldLabel'
import FormFieldErrors from 'wf-dbd-react-ui/es/FormFieldErrors'
import Translatable from 'wf-dbd-react-ui/es/Translatable'
import Block from 'wf-dbd-react-ui/es/Block'
import withStrings from 'wf-dbd-react-ui/es/withStrings'

import { getMemoLabel } from '../../../../lib/utils/manage-payee-util'
import FormInput from 'wf-dbd-react-ui/es/FormInput'
import withMemoValidation from './withMemoValidation'
import ArialiveMemo from './ArialiveMemo'
import styles from './Memo.less'
import FormFieldErrorIcon from 'wf-dbd-react-ui/es/FormFieldErrorIcon'
import { MEMO_MAX_CHARS } from '../../../../components/workflows/edit-payment/constants'

const Memo = ({
fieldId,
defaultMemo,
memo,
isConfirm,
getString,
validateMemoField,
userTypedMemo,
isMemoFieldError,
memoFieldValidate,
defaultMemoValidate
}) => {
useEffect(() => {
memoFieldValidate(userTypedMemo <= MEMO_MAX_CHARS)
}, [userTypedMemo, memoFieldValidate] )

useEffect(() => {
defaultMemoValidate(defaultMemo && defaultMemo.length <= MEMO_MAX_CHARS)
}, [defaultMemo, defaultMemoValidate] )


const memoLabel = getMemoLabel()
return !isConfirm ? (
<Block className={styles.memo}>
<FormField fieldId={fieldId}>
<FormFieldLabel>
{ isMemoFieldError &&
<FormFieldErrorIcon className={styles.errorIcon} />
}
<div className={isMemoFieldError ? styles.errorMemoLabel : styles.memoLabel}>
<Translatable id={memoLabel} />
</div>
</FormFieldLabel>
<FormInput
className={isMemoFieldError ? styles.inputerror : styles.input}
initialValue={defaultMemo}
onChange={validateMemoField}
type="text"
maxLength={MEMO_MAX_CHARS}
placeholder={getString('memoPlaceholder')}
deleteOnUnmount={true}
/>
<FormFieldErrors />
{userTypedMemo && <ArialiveMemo count={userTypedMemo} />}
</FormField>
</Block>
) : (
<React.Fragment>
<Translatable id={memoLabel} />
<Block>
<strong className={memo.length > MEMO_MAX_CHARS ? styles.inputerror : ''}>
{memo}
</strong>
</Block>
</React.Fragment>
)
}

Memo.defaultProps = {
isConfirm: false
}

Memo.propTypes = {
fieldId: PropTypes.string,
defaultMemo: PropTypes.string,
isConfirm: PropTypes.bool,
memo: PropTypes.string,
validateMemoField: PropTypes.func,
userTypedMemo: PropTypes.number,
isMemoFieldError: PropTypes.bool,
memoFieldValidate: PropTypes.func,
defaultMemoValidate: PropTypes.func
}

export default withMemoValidation(withStrings(Memo))

但是,当我运行 test-cov 时,它说第 2、3 和 8 行未被覆盖。如何在reducer文件中覆盖if else条件。

最佳答案

我认为您的测试用例未正确测试,clearErrors 接受两个参数:stateaction 但您仅传入CARD_TYPES.REWARD 进入 clearErrors 函数。

因此,您只需提供正确的单元测试来覆盖每个条件:)

第 2 行:if (action.payload.cardType === CARD_TYPES.REWARD) {

第 3 行:返回 {

  it("should clear out error codes", () => {
const action = { payload: { cardType: CARD_TYPES.REWARD } };
const state = clearErrors(initialState, action);
const expectedState = { ... };
expect(state).toEqual(expectedState);
});

第 8 行:返回状态;

  it("should not clear out error codes", () => {
const action = { payload: { cardType: 'other' } };
const state = clearErrors(initialState, action);
expect(state).toEqual(initialState);
});

关于javascript - 使用 Jest Enzyme 测试 React Reducer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61402328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com