reactjs - 无法使用 sinon 从“复制到剪贴板”测试副本
问题描述
我正在尝试使用 Sinon 测试我的组件。看来我无法模拟 TableMenu 组件中的单击功能。 表菜单.jsx
import copy from 'copy-to-clipboard';
const TableMenu = ({onClick, onHide, rowId}) => (
<MenuPopover
onClick={onClick}
onHide={onHide}>
<MenuPopover.Item id={1} onClick={() => copy(rowId)} label='Copy'/>
</MenuPopover>
);
TableMenu.test.js
import copy from 'copy-to-clipboard';
jest.mock('copy-to-clipboard', () => sinon.spy());
it('check method onCopy called', () => {
const wrapper = shallow(<TableMenu {...props}/>);
wrapper.find(MenuPopover.Item).last().props().onClick()
expect(copy.calledOnce).to.eql(true);
});
我收到以下错误:
Error: Not implemented: window.prompt
at module.exports (C:\adm\node_modules\jsdom\lib\jsdom\browser\not-implemented.js:9:17)
at Window.prompt (C:\adm\node_modules\jsdom\lib\jsdom\browser\Window.js:458:7)
at copy (C:\adm\node_modules\copy-to-clipboard\index.js:58:14)
at Object.onClick (C:\adm\src\TableMenu/TableMenu.jsx:19:43)
...
...
TypeError: reselectPrevious is not a function
at copy (node_modules\copy-to-clipboard\index.js:72:5)
at Object.onClick (src\TableMenu/TableMenu.jsx:19:43)
at Context.<anonymous> (src\TableMenu/TableMenu.test.js:62:62)
at process.topLevelDomainCallback (domain.js:121:23)
解决方案
我想这正在github repo中讨论,潜在的解决方案可能是#106(评论)
或者,只是简单地模拟 window.prompt 的实现。例如
jest.spyOn(window, 'prompt').mockImplementation();
推荐阅读
- java - 如何在图表中找到连接器?
- node.js - 如何通过 node app 获取远程 linux 服务器上的剩余磁盘空间
- c++ - 使用getline从输入文件打印时如何忽略空白行
- php - 如何在一个字段中将复选框值表单保存到 MySQL
- mysql - 如何使用 MySQL 在两个日期之间获取该周的周数和日期
- java - 未能找到库:liblwjgl.so | Eclipse 中的 Java
- java - 如何创建规则(HTTP 请求重定向不应该对伪造攻击开放 - RSPEC-5146)java 插件
- python - 如何修改此 python 脚本以获取相同的 json 文件而没有高位部分?
- react-native - React native run-ios 忽略模拟器选项
- assembly - 有没有其他方法可以在没有魔术助手的情况下在 Assembly 中编写这些“数据”部分?