首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用MART()的酶测试无法获得反应模态对话框的内容

使用MART()的酶测试无法获得反应模态对话框的内容

提问于 2018-06-07 20:27:37
回答 1关注 0查看 171

我有一个带有模态对话框的Reaction组件(使用reactstrap,但其他人也报告了类似的问题react-bootstrap以及其他类型的模态部件)。酶在模态中找不到任何成分,即使它们在实际的应用程序中呈现得很好。最起码的例子:

代码语言:txt
AI代码解释
复制
import React from 'react'
import { Modal } from 'reactstrap'

export default class MyModal extends React.Component {

    render() {
        return (
            <div className="outside"> Some elements outside of the dialog </div>
            <Modal isOpen={this.props.modalOpen}>
                <div className="inside"> Content of dialog </div>
            </Modal>
         );
    } 
}

我想测试内容(在本例中使用jest)像这样

代码语言:txt
AI代码解释
复制
import React from 'react'
import MyModal  from './MyModal'
import { mount } from 'enzyme'

it('renders correctly', () => {
    const wrapper = mount( <MyModal modalOpen/> );

    expect(wrapper).toMatchSnapshot();

    // Passes
    expect(wrapper.find('.outside')).toHaveLength(1);

    // Fails, 0 length
    expect(wrapper.find('.inside')).toHaveLength(1);
});

测试正确地找到了Modal之外的内容,但是没有在里面找到任何东西。查看快照显示,实际上,在<Modal>被渲染。但是,如果我替换mount带着shallow。问题是我需要mount测试生命周期方法,如componentDidMount

为什么不mount渲染模态的内容?我认为关键在于它呈现了整个子元素树。

回答 1

akjok54

回答已采纳

发布于 2018-06-08 05:59:50

这意味着它创建了直接附加到文档根的DOM元素,而不是父响应组件的子元素。

mount从顶层组件创建的元素开始查看DOM,因此找不到模型的内容。但酶shallow不附加到DOM,而是构建自己的组件树,其中包含模态内容。

要测试门户组件,首先需要找到附加到文档主体的DOM元素。然后您可以创建一个新的ReactWrapper在它们周围,所有通常的酶功能都能发挥作用:

代码语言:txt
AI代码解释
复制
import React from 'react'
import MyModal  from './MyModal'
import { mount, ReactWrapper } from 'enzyme'

it('renders correctly', () => {
    const wrapper = mount( <MyModal modalOpen/> );

    expect(wrapper).toMatchSnapshot();

    // Passes
    expect(wrapper.find('.outside')).toHaveLength(1);

    // Construct new wrapper rooted at modal content
    inside_els = document.getElementsByClassName("inside")[0]
    inside_wrapper = new ReactWrapper(inside_els, true)

    // Passes
    expect(inside_wrapper.find('.inside')).toHaveLength(1);
});

更新:似乎酶也会在测试结束后将模式附加到DOM,因此在以后的测试中可能会打开多个对话框。如果这是一个问题,您可以在每次测试之后清除DOM,如下所示:

代码语言:txt
AI代码解释
复制
afterEach(() => {
  var node = global.document.body;
  while (node.firstChild) {
    node.removeChild(node.firstChild);
  }
}); 
和开发者交流更多问题细节吧,去 写回答
相关文章
Qt模态对话框和非模态对话框
Qt 中使用QDialog类实现对话框。我们的对话框通常继承自QDialog。对话框分为模态对话框和非模态对话框。所谓模态对话框,就是会阻塞同一应用程序中其它窗口的输入。Qt使用QDialog::exec()来实现模态对话框。如下所示:
zy010101
2020/04/10
3.5K0
Qt模态对话框和非模态对话框
[MFC]模态与非模态对话框
当模态对话框显示时,程序会暂停执行,直到关闭这个模态对话框之后,才能执行程序中的其他任务。
祥知道
2020/03/10
1.7K0
bootstrap bootstrap-modal.js 模态对话框 并获得传值
<!doctype html> <html> <head> <meta charset="utf-8"> <title>联想控股</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="css/bootstrap.css" rel="stylesheet" type="text/css"> <script src="http://code.jquery.com/jquery.js"></script> <script src="js/bootstrap.min.js"></script> </head> <body> <div class="modal fade" id="qrcode" tabindex="-1" role="dialog" aria-labelledby="information"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"> <span>×</span> </button> <h4 class="modal-title">请扫描二维码,完成支付</h4> </div> <div class="modal-body" style="text-align: center"> <p id="message"></p> <img src="" alt="QRCode" id="scan"> </div> </div> </div> </div> <button id="popup" class="btn btn-primary btn-lg btn-block">我弹</button> <script>
用户5760343
2019/07/07
6.6K0
Android-无法获得Service内容-Service通信
当程序通过startService()和stopService()启动、关闭Service时Service与访问者不存在太多关联,因此service与用户之间无法进行通信、交换数据。
圆号本昊
2021/09/24
8040
Android-无法获得Service内容-Service通信
mfc 创建模态对话框与非模态对话框
所谓模态对话框就是该对话框被创建后,其父窗口不能响应任何消息,无法操作,只有在关闭了新创建出来的窗口后才能继续操作其后面的父窗口。而非模态对话框则不会有这种情况,非模态对话框创建完成后不影响父窗口的操作,两个窗口可以同时响应消息。
我与梦想有个约会
2023/10/20
4580
mfc 创建模态对话框与非模态对话框
8.QT-对话框(模态与非模态)
对话框介绍 对话框是于用户进行简易交互的顶层窗口 QDialog是Qt中所有对话框窗口的父类,是一种容器类型的组件 QDialog继承于QWidget类,如下图所示: QWidget和QDialog有
诺谦
2018/05/28
2.1K0
PyQt5 模态对话框
所谓的模态对话框是指,一旦调用该对话框,它就会成为应用程序唯一能与用户进行交互的部件。在关闭对话框之前,用户都不能使用应用程序的其他部件。模态对话框是最简单的,因为会阻塞与对话框的父窗口及父窗口的兄弟窗口之间的其他任何交互,所以可降低对那些正在使用的数据在后台被修改的风险。模态对话框的缺点是用户不能实时地看到修改效果。
用户6021899
2019/08/13
2.5K0
生化小课 | 酶促进了化学反应通路
所有生物大分子的热力学稳定性远低于其单体亚基,但它们在动力学上是稳定的:它们的非催化分解发生得很慢(几年而不是几秒钟),以至于在对生物体至关重要的时间尺度上,这些分子是稳定的。事实上,细胞中的每一个化学反应都以很快的速度发生,这仅仅是因为酶(enzymes)的存在——生物催化剂,与所有其他催化剂一样,极大地提高了特定化学反应的速度,而不会在过程中被消耗。
尐尐呅
2022/09/04
1.1K0
生化小课 | 酶促进了化学反应通路
JCIM|EHreact:用于酶促反应模板提取和评分的扩展Hasse图
2021年9月29日,JCIM上发表了有关酶促反应模板提取和评分的文章:"EHreact: Extended Hasse Diagrams for the Extraction and Scoring of Enzymatic Reaction Templates"。
智药邦
2022/03/04
9350
JCIM|EHreact:用于酶促反应模板提取和评分的扩展Hasse图
Ubuntu“无法获得锁”解决方案(E: 无法获得锁 /var/cache/apt/archive)
[scode type="yellow"]Ubuntu “无法获得锁”解决方案(E: 无法获得锁 /var/cache/apt/archive)[/scode]
乐心湖
2020/07/31
1.8K0
bootstrap bootstrap-modal.js 模态对话框
<!doctype html> <html> <head> <meta charset="utf-8"> <title>联想控股</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link href="css/bootstrap.css" rel="stylesheet" type="text/css"> <script src="http://code.jquery.com/jquery.js"></script> <script src="js/bootstrap.min.js"></script> </head> <body> <button type="button" class="btn btn-danger" data-toggle="modal" data-target=".ex-modal-lg">大模态框</button> <div class="modal fade ex-modal-lg" tabindex="-1" role="dialog" aria-labelledby="largerModal"> <div class="modal-dialog modal-lg" role="document"> <div class="modal-content"> <div class="modal-header">larger modal header</div> <div class="modal-body"> <img src="img/img.jpg" style="padding: 5px;"> larger modal body</div> <div class="modal-footer">larger modal footer</div> </div> </div> </div> <button type="button" class="btn btn-primary" data-toggle="modal" data-target=".ex-modal-sm">小模态框</button> <div class="modal ex-modal-sm" tabindex="-1" role="dialog" aria-labelledby="smallmodal"> <div class="modal-dialog modal-sm" role="document"> <div class="modal-content"> <div class="modal-header">small modal header</div> <div class="modal-body"> <img src="img/img.jpg" style="padding: 5px;"> small modal body</div> <div class="modal-footer">small modal footer</div> </div> </div> </div> </body> </html>
用户5760343
2019/07/07
3.2K0
模态对话框-B 类产品设计细节:对话框 vs 抽屉
  说明:对话框和抽屉都是在当前页面之上覆盖出现的组件,让用户在不离开主路径的情况下,查看信息/提示/反馈,或快速执行某些的操作。两者的交互模式有类似之处,使用场景也有所重叠。本文对两个组件的主要差别进行了对比,并提供方法帮助大家快速判断应该选择哪一个。
宜轩
2022/12/29
1.9K0
软件测试的内容
软件测试是一个快速发展的职业领域,随着信息技术的不断发展和应用,软件测试的重要性也越来越受到重视。软件测试职业是指专门从事软件测试工作的人员,他们负责对软件系统进行全面、深入、有效的测试,发现和解决软件中的缺陷和错误,提高软件的质量和可靠性。
FunTester
2023/08/04
2580
软件测试的内容
如何测试前台获得的数据
测试前台获得的数据可使用ajax,在代码中加debugger打上断电之后,查看获得的data数据。 $.ajax({         async:false,         type:"post",         dataType:'json',         url : "url" + new Date().getTime(),         success :function(data){             debugger;         }         });
就只是小茗
2018/03/07
2.1K0
mipush的receiver无法获得消息,断点也失效,原因很奇葩strings.xml缺少内容
mipush的receiver无法获得消息,断点也失效,原因很奇葩strings.xml缺少内容
战神伽罗
2019/07/24
6110
内容 AI:建立统一的跨媒体多模态内容理解内核
作者:zixunsun@tencent.com Jeff Dean 谈 2020 年机器学习趋势:多任务和多模式学习将成为突破口 2019 年下半年,CDG 广告、 CSIG 音视频,IEG 内容推荐、PCG 信息流、TEG 数平广告推荐和 AI 平台部团队、WXG 看一看团队内容技术专家沟通,大家在处理内容理解任务时候,都有融合多模态特征进行内容理解需求,同时大家具有很好的技术能力和研发经验。 我们希望能建立统一的跨媒体多模态内容理解内核,对新增内容理解任务,快速完成 0-1 步积累,提升模型实
腾讯技术工程官方号
2020/01/10
4.9K1
内容 AI:建立统一的跨媒体多模态内容理解内核
E: 无法获得锁 /var/lib/dpkg/lock
Ubuntu下很常见的问题,标记一下。 u1@node:~# sudo apt-get install -y mysql-client mysql-server E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它? u1@node:~# sudo apt-get install -y mysql-client mysql-server E: 无法获得锁 /var/lib/dpkg/l
程裕强
2022/05/06
4480
Qt标准对话框的使用
学习编程个人觉得还是得从代码谈起,一方面有利于加深理解,另一方面也方便使(摘)用(抄)。
mythsman
2022/11/14
5530
点击加载更多

相似问题

py+selenium怎么定位自动弹出的showModalDailog模态对话框?

0466

使用LottieDialog无法为对话框设置透明颜色?

067

pywinauto操作三维软件,无法获得软件内容怎么办?

0112

使用wetest进行测试,URL中的内容被截取了怎么解决?

0123

请问:内容 AI:建立统一的跨媒体多模态内容理解内核 篇博文的参考文献能给全吗?

0130
相关问答用户
平安资管 | 架构师擅长4个领域
擅长3个领域
腾讯云TDP | 高级后端开发工程师擅长3个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档