当我在调用onClick函数的包装子组件按钮上“模拟('click')”时,根组件道具不会更新

时间:2019-02-08 22:31:09

标签: reactjs jestjs enzyme

我是React的新手,并在Google上搜索了很多资源,但无法解决我的问题...

当我通过“ simulate(click)”单击按钮时,它可以工作,并且我可以看到测试的正确结果“调用props.onPointDelete”。但是在此之后,我应该看到这个包装器的新道具(pointsList),该包装器是从我拥有onClick处理程序的根应用程序组件接收到的。并且它不会更新。这是第二个测试“ points.length equals 1”失败了。 PointsList组件是功能组件。

我试图通过afterEach()函数更新包装器,但它不起作用。也许这个问题与我的包装器的mount()方式有关?但是我不能使用shallow()方式,因为我需要为当前测试访问包装器的子组件的子组件。你能帮我吗?

  

PointsList.spec.js:

BCC
  

PointsList.js:

import smtplib

def send_email(subject, body_text, emails_to, emails_cc=[], emails_bcc=[]):
    # Configuration
    host = "localhost"
    port = 1025
    from_addr = "nobody@somewhere.com"
    # Build the email body
    body = "\r\n".join([
            "From: %s" % from_addr,
            "To: %s" % ', '.join(emails_to),
            "CC: %s" % ', '.join(emails_cc),
            "Subject: %s" % subject ,
            "",
            body_text
            ])
    # Prepare the complete list of recipient emails for the message envelope
    emails = emails_to + emails_cc + emails_bcc
    # Connect to the server
    server = smtplib.SMTP(host, port)
    # Send the email
    server.sendmail(from_addr, emails, body)
    # Close the server connection
    server.quit()

1 个答案:

答案 0 :(得分:1)

您在单元测试中混合了集成测试。上面是单元测试。由于您仅安装了shallow无状态函数并嘲笑了mount函数,因此您只能安装PointList而不是onPointDelete来使用jest parent的方法及其方法。简单来说,您已将测试隔离到child,而不是不是父母+子女。您不是在调用父级的onPointDelete方法,而是在调用伪造/模拟的函数!

如果您要对父母+子女进行整合测试,则mount包含parent的{​​{1}},设置父母的{{1 }}(与您在child上所做的相同,只是使用state),模拟props函数,然后测试{{1} }和/或parent.setState(...)更改。


以下是集成和单元测试的示例https://codesandbox.io/s/p3ro0615nm(我正在使用自定义的onPointDeletestate函数,您可以在prop-您可以通过点击屏幕底部shallowWrapmountWrap旁边的tests/utils/index.js标签来运行测试

Tests中的测试是集成测试。该测试将逐步遍历多个组件,并检查父节点和子节点之间的总体正常功能,以及检查Console更新。我将一些测试留为空白,因此,如果您愿意,可以填写它们进行练习。

Problems中的测试是单元测试-请注意,此测试是不必要的,因为上面的集成测试已经介绍了该测试,但这是出于将子组件与父组件隔离的示例。此测试检查子组件功能,containers/LOAs/__tests__/LOAs.test.js验证和模拟函数调用。