使用 Metamask 进行测试的赛普拉斯测试方法
Posted
技术标签:
【中文标题】使用 Metamask 进行测试的赛普拉斯测试方法【英文标题】:Cypress test approach for testing with Metamask 【发布时间】:2020-09-03 21:44:37 【问题描述】:我想测试我的应用程序如何与 Metamask 交互(例如,钱包是否打开?)并创建一个灵活的测试配置,使我能够以类似于普通“登录”的方式通过“安装”Metamask 接口来访问应用程序' 在 Assert JS (2018) 讲座视频中完成(我使用 MM 有效登录),例如:https://www.youtube.com/watch?v=5XQOK0v_YRE 是否有任何关于使用 Cypress 测试 Metamask 的参考资料或建议? Cypress 有以下用于加载 Chrome 扩展插件的文档:
module.exports = (on, config) =>
on('before:browser:launch', (browser, launchOptions) =>
// supply the path to an unpacked WebExtension
// NOTE: extensions cannot be loaded in headless Chrome
launchOptions.extensions.push('/path/to/webextension')
return launchOptions
)
但除此之外没有其他帮助。加载后,我将如何与之交互以生成有意义的测试? 我希望这应该是可能的。我看到其他人已经考虑过这些问题,我已经在 MM github 上发布了这个问题: https://github.com/MetaMask/metamask-extension/issues/8605 谢谢...
【问题讨论】:
【参考方案1】:根据: https://github.com/cypress-io/cypress/issues/1965
您无法使用 Cypress 轻松测试扩展程序或与扩展程序交互。
作为一种解决方法,我将 puppeteer 与 Cypress 结合使用来实现这一目标。
您加载扩展的示例是正确的。你可以在这里看到我的方法,它会在浏览器中加载最新的元掩码版本之前下载它: https://github.com/Synthetixio/synpress/blob/16095f8eb9ad6d92e95719c903878c32991a8ab2/plugins/index.js#L56-L58
但是,在走这条路之前,请记住这些事情:
-
因为在您运行浏览器后初始安装时元掩码会作为新选项卡打开,赛普拉斯测试不会以默认设置开始,因为赛普拉斯后台选项卡将处于“非活动状态”。要解决此问题,您需要使用这些:
module.exports = (on, config) =>
on('before:browser:launch', async (browser = , arguments_) =>
if (browser.name === 'chrome')
arguments_.args.push('--disable-background-timer-throttling');
arguments_.args.push('--disable-backgrounding-occluded-windows');
arguments_.args.push('--disable-renderer-backgrounding');
https://github.com/Synthetixio/synpress/blob/16095f8eb9ad6d92e95719c903878c32991a8ab2/plugins/index.js#L48-L53
-
始终在
cypress.json
配置中使用 "chromeWebSecurity": true
,否则 metamask 将无法与 dapp 正常工作并出现连接问题。
https://github.com/Synthetixio/synpress/issues/17
考虑是否不需要长期关闭它们: https://docs.cypress.io/guides/guides/web-security.html#Limitations
-
始终在 Headed 模式下运行 Cypress (
cypress run --headed
)。 Headless 不适用于扩展。
随时查看 Synpress,它是 metamask 与 Cypress 的集成: https://github.com/Synthetixio/synpress
我想你可以在这里找到很多适合你需要的细节。
干杯, 雅库布。
【讨论】:
以上是关于使用 Metamask 进行测试的赛普拉斯测试方法的主要内容,如果未能解决你的问题,请参考以下文章