我是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()
答案 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(我正在使用自定义的onPointDelete
和state
函数,您可以在prop
-您可以通过点击屏幕底部shallowWrap
和mountWrap
旁边的tests/utils/index.js
标签来运行测试
Tests
中的测试是集成测试。该测试将逐步遍历多个组件,并检查父节点和子节点之间的总体正常功能,以及检查Console
更新。我将一些测试留为空白,因此,如果您愿意,可以填写它们进行练习。
Problems
中的测试是单元测试-请注意,此测试是不必要的,因为上面的集成测试已经介绍了该测试,但这是出于将子组件与父组件隔离的示例。此测试检查子组件功能,containers/LOAs/__tests__/LOAs.test.js
验证和模拟函数调用。