【问题标题】:translate is not a function Admin-On-Rest testtranslate 不是一个函数 Admin-On-Rest 测试
【发布时间】:2018-03-24 11:48:45
【问题描述】:

我正在尝试基于 admin-on-rest 登录页面测试登录页面上的空用户名文本字段。

https://github.com/marmelab/admin-on-rest/blob/master/src/mui/auth/Login.js

我的测试用例是这样的。

import Login, { renderTextField } from '../../../modules/core/Login';
import {propTypes, reduxForm, Field, reducer as formReducer} from 'redux-form';
import redux, { createStore, combineReducers } from 'redux'
import { Provider } from 'react-redux'

describe ('<Login/>', () => {
  let container
  let submitting 
  let onSave 
  let store
  let tn

  beforeEach(()=>{
    submitting = false
    //tn= sinon.spy()
    onSave = Promise.resolve()
  })

  it("shows help text when first name is set to blank", () => {
    store = createStore(combineReducers({ form: formReducer }))
    tn = (label) => label;
    const props = {
        onSave,
        submitting: false,
        theme: customTheme,
        translate: tn, 
        store
    }
    container = mount(
      <Provider store={store}>
        <Login {...props}/>
      </Provider>
    )
        const input = container.find('TextField').first()
        input.simulate('blur')
        console.log(input.debug())
        expect(input.props.errorText).to.equal('Required')
    })

})

我在 redux 表单验证函数中遇到错误。

TypeError: translate is not a function
at validate (C:/src/modules/core/Login.js:165:25)

即上面代码中链接上的这一行

errors.username = translate('aor.validation.required');

我该如何测试?

【问题讨论】:

    标签: reactjs redux-form admin-on-rest


    【解决方案1】:

    你也必须包含TranslationProvider

    import { TranslationProvider } from 'admin-on-rest';
    /* ... */
    
    it("shows help text when first name is set to blank", () => {
        store = createStore(combineReducers({ form: formReducer }))
        const props = {
            onSave,
            submitting: false,
            theme: customTheme,
            store
        }
        container = mount(
          <Provider store={store}>
              <TranslationProvider locale="en">
                  <Login {...props}/>
              </TranslationProvider>
          </Provider>
        )
        const input = container.find('TextField').first()
        input.simulate('blur')
        console.log(input.debug())
        expect(input.props.errorText).to.equal('Required')
    })
    

    【讨论】:

    • 非常感谢您的帮助。但我仍然收到一个警告。 “TranslationProvider 中的 prop locale 标记为必填,但其值为undefined。”此外,我的登录页面中也有一个通知来报告登录状态。我收到错误“无法读取未定义的属性'通知'”。如何更新这个全局状态变量?
    猜你喜欢
    • 2019-11-28
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 2019-03-30
    • 1970-01-01
    • 2022-11-21
    相关资源
    最近更新 更多