【问题标题】:Is componentDidMount supposed to run with shallow rendering in Enzyme?componentDidMount 是否应该在 Enzyme 中以浅渲染运行?
【发布时间】:2018-04-28 19:21:31
【问题描述】:

根据我的理解以及迄今为止我在各种答案中所读到的内容,并非所有生命周期方法都应该以浅渲染运行。特别是componentDidMount

但是,我注意到当我这样做时

  beforeEach(function () {
    fakeComponentDidMount = sinon.stub(Component.prototype, 'componentDidMount');
    fakeComponentDidMount.callsFake(function () {});
    wrapper = shallow(<Component {...props} />);
  });

  afterEach(function () {
    fakeComponentDidMount.restore();
  });

  it('calls componentDidMount', function () {
    expect(fakeComponentDidMount.called).to.equal(true);
  });

测试通过。

那么,我在这里做错了什么还是我理解错了什么?

For reference

【问题讨论】:

    标签: javascript reactjs unit-testing enzyme


    【解决方案1】:

    是的,它在enzyme 3.0

    https://github.com/airbnb/enzyme/blob/master/CHANGELOG.md#300

    LifeCycleExperimental 以前是您必须在 shallow 上手动设置为 true 的选项,现在默认启用,因为它现在很稳定。

    这比在想要测试生命周期时不得不求助于mount 要好得多。

    现在绝对没有理由不使用 shallow 进行单元测试 :)...除了你需要测试 refs 的时候 :(.

    【讨论】:

    • 太棒了,谢谢。这是否意味着所有生命周期方法现在都使用shallow 渲染执行?我想我可能会打开一个 PR 来记录每种渲染类型中运行的生命周期方法
    • @DimitrisKaragiannis 我想是的。您可以快速测试每个渲染生命周期来确定。
    • 我使用的是 3.3.0 版本,并且在浅渲染期间没有调用 componentDidMount,但 componentWillMount 会。有人知道发生了什么吗? @DimitrisKaragiannis 你搞定了吗?
    • @DanielSunYang 这很奇怪。它肯定适用于 3.0,因为我尝试过。你可以试试3.0吗?这可能是以后软件包中的错误。做:npm uninstall enzyme 然后npm install --save-dev enzyme@3.0。如果这仍然不起作用,那么您的设置一定有问题,您需要发布一个 SO 问题。
    猜你喜欢
    • 1970-01-01
    • 2016-10-29
    • 2020-03-12
    • 2017-03-11
    • 2019-03-19
    • 2016-12-18
    • 2020-12-16
    • 2020-11-14
    • 2021-04-23
    相关资源
    最近更新 更多