使用 Metamask 进行测试的 Cypress 测试方法

dot*_*pec 8 testing metamask cypress

我想测试我的应用程序如何与 Metamask 交互(例如,钱包是否打开?)并创建一个灵活的测试配置,使我能够通过“安装”Metamask 接口来访问应用程序,方式与普通“登录”的方式类似(我使用 MM 有效登录)在 Assert JS (2018) 讲座视频中,例如: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
      })
    }
Run Code Online (Sandbox Code Playgroud)

但除此之外没有其他帮助。一旦加载,我将如何与其交互以产生有意义的测试?我希望这应该是可能的。我看到其他人已经考虑过这些问题,我已经在 MM github 中发布了这个问题: https: //github.com/MetaMask/metamask-extension/issues/8605 thx ...

Jak*_*cha 6

根据: https: //github.com/cypress-io/cypress/issues/1965

您无法轻松使用 Cypress 测试扩展或与扩展交互。

作为一种解决方法,我将 puppeteer 与 Cypress 结合使用来实现此目的。

您加载扩展的示例是正确的。您可以在这里看到我的方法,它在浏览器中加载之前下载最新的元掩码版本: https://github.com/Synthetixio/synpress/blob/16095f8eb9ad6d92e95719c903878c32991a8ab2/plugins/index.js#L56-L58

但是,在这样做之前请记住以下事项:

  1. 由于运行浏览器后,元掩码在初始安装时作为新选项卡打开,因此赛普拉斯测试不会以默认设置启动,因为赛普拉斯背景选项卡将处于“非活动状态”。要解决此问题,您需要使用这些:
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');
    }
}
Run Code Online (Sandbox Code Playgroud)

https://github.com/Synthetixio/synpress/blob/16095f8eb9ad6d92e95719c903878c32991a8ab2/plugins/index.js#L48-L53

  1. 始终"chromeWebSecurity": truecypress.json配置中使用,否则元掩码将无法与 dapp 一起正常工作并出现连接问题。 https://github.com/Synthetixio/synpress/issues/17

考虑您是否不需要长期关闭它们: https://docs.cypress.io/guides/guides/web-security.html#Limitations

  1. 始终在头模式 ( ) 内运行 Cypress cypress run --headed。Headless 无法与扩展一起使用。

请随意查看 Synpress,它是 Metamask 与 Cypress 的集成: https: //github.com/Synthetixio/synpress

我认为您可以在这里找到很多适合您需求的详细信息。

干杯,雅各布。