使用 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 进行测试的赛普拉斯测试方法的主要内容,如果未能解决你的问题,请参考以下文章

赛普拉斯 - 如何按顺序运行测试文件

赛普拉斯可以运行在赛普拉斯文件夹之外导入的测试文件吗?

如何在赛普拉斯的所有测试套件之前执行代码?

赛普拉斯在多项测试中冻结

如何查看赛普拉斯测试使用的属性值?

有没有更好的方法来抑制赛普拉斯开玩笑测试顶部关于“三斜杠指令”的 ESLint 错误?