【问题标题】:Jest mocking a functional component嘲笑一个功能组件
【发布时间】:2020-02-05 06:35:49
【问题描述】:

我觉得我错过了什么。我正在尝试模拟一个功能组件,但它一直给我一个错误

如果我这样做

TestRenderer.create(
      <FunctionalComponent/>
)

它给出了错误

Invariant Violation: FunctionalComponent(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.

如果我将它更改为基于类的组件,它就可以工作。

如何模拟功能组件?谢谢!

编辑:

我尝试模拟这个组件

const SampleComponent = () => {
  return <View/>
}

它给出了错误,

但是这个

class SampleClassComponent extends Component {
  render() {
    return <View/>
  }
}

没有

运行时出错

jests.mock('path/to/component')

【问题讨论】:

  • 你能发布你的测试组件吗?
  • @Fricken Hamster 您在哪里找到您添加的附加代码的示例?
  • @Fricken Hamster 你有没有找到解决这个问题的方法?

标签: reactjs mocking jestjs


【解决方案1】:

你必须在你的函数组件中返回一些东西,即使它是空的。功能组件是Link。

import React from 'react';
import TestRenderer from 'react-test-renderer';

function Link(props) {
  return null;
}

const testRenderer = TestRenderer.create(
  <Link/>
);

console.log(testRenderer.toJSON());

export default Link;

import React from 'react';
import TestRenderer from 'react-test-renderer';

function Link(props) {
  return <a href={props.page}>{props.children}</a>;
}

const testRenderer = TestRenderer.create(
  <Link/>
);

console.log(testRenderer.toJSON());

export default Link;

参考资料:

【讨论】:

  • 嗯,我肯定在我的功能组件中返回了一些东西,实际的应用程序正在运行。
  • @Fricken Hamster 通过编辑将功能组件代码(或类似代码,如果您不同意其他人看到原始代码)添加到您的问题中。我想不出另一个原因,只是在黑暗中拍摄。
  • 感谢您的回复,我添加了我现在测试的组件,这些组件给出了错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-07
  • 2014-10-27
  • 2011-04-10
  • 2016-10-02
  • 2019-12-20
  • 1970-01-01
相关资源
最近更新 更多