带有 Expo-cli 的 Jestjs。 Invariant Violation:元素类型无效

Posted

技术标签:

【中文标题】带有 Expo-cli 的 Jestjs。 Invariant Violation:元素类型无效【英文标题】:Jestjs with Expo-cli. Invariant Violation: Element type is invalid 【发布时间】:2019-12-05 22:34:52 【问题描述】:

Jest 似乎无法使用我导入的组件。

这通常是导出/导入设置方式的问题,但我的控制台日志显示该组件正在导入文件中,但没有进入描述函数(请参阅下面的内联 cmets)

import ValidInput from '../components/ui/ValidInput';
console.log(typeof ValidInput) // 'function'

describe('ValidInput', () => 
    it('Renders succesfully', () => 
        console.log(typeof ValidInput) // 'undefined'
        const validInputInst = renderer.create(
            <View>
                <ValidInput 
                    inputType='email'
                    validationRules=
                        isEmail: true,
                    
                />
            </View>
        )
        const ValidInput = validInputInst.root.findByType(ValidInput)
    )
)

组件:

export default class ValidInput extends Component 
  constructor (props) 
    super(props);
  
...

错误:不变违规:元素类型无效:需要字符串(对于内置组件)或类/函数(对于复合组件),但得到:未定义。您可能忘记从定义组件的文件中导出组件,或者您可能混淆了默认导入和命名导入。

期望能够渲染组件

【问题讨论】:

【参考方案1】:

原来问题出在这一行:

const ValidInput = validInputInst.root.findByType(ValidInput)

这里还有一个: inputType='email'

由于某些原因,虽然 ValidInput 在 describe() 的范围内未定义,但如果您尝试分配一个名为 ValidInput (const ValidInput) 的变量,在导入上面同名的内容后,它会抛出 Invariant Violation 错误就好像你在尝试调用你没有导入的东西一样。

【讨论】:

以上是关于带有 Expo-cli 的 Jestjs。 Invariant Violation:元素类型无效的主要内容,如果未能解决你的问题,请参考以下文章

如何在单个测试的基础上更改模拟实现 [Jestjs]

在 jestjs 中完成测试后无法登录

JestJS -> 不变违规:在“连接(投资组合)”的上下文或道具中找不到“商店”

如何修复安装 expo-cli

jestjs将错误抛出为`TypeError:_App.default不是构造函数`

无法安装 expo-cli -g