赛普拉斯使用Metamask进行测试的测试方法

时间:2020-05-18 06:38:51

标签: testing cypress metamask

我想测试我的应用程序如何与Metamask交互(例如,钱包是否打开?),并创建一个灵活的测试配置,使我能够通过“安装” Metamask接口以类似于普通“登录”的方式来访问应用程序。已在Assert JS(2018)讲座视频中完成(我使用MM进行有效登录),例如:https://www.youtube.com/watch?v=5XQOK0v_YRE 是否有任何参考材料或建议用于使用赛普拉斯测试Metamask?赛普拉斯具有以下用于加载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 个答案:

答案 0 :(得分:0)

按照: https://github.com/cypress-io/cypress/issues/1965

您无法使用赛普拉斯轻松测试扩展或与扩展交互。

作为一种解决方法,我将puppeteer与赛普拉斯结合使用以实现这一目标。

您加载扩展程序的示例是正确的。您可以在这里看到我的方法,该方法会在将其下载到浏览器之前先下载最新的metamask版本: https://github.com/Synthetixio/synpress/blob/16095f8eb9ad6d92e95719c903878c32991a8ab2/plugins/index.js#L56-L58

但是,在进行这种操作之前,请记住以下几点:

  1. 由于在运行浏览器后,metamask在初始安装时作为新选项卡打开,因此赛普拉斯测试不会从默认设置开始,因为赛普拉斯的背景选项卡将处于“非活动状态”。要解决此问题,您需要使用以下命令:
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

  1. 始终在"chromeWebSecurity": true配置中使用cypress.json,否则metamask将无法与dapp一起正常使用,并且存在连接问题。 https://github.com/Synthetixio/synpress/issues/17

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

  1. 始终以抬头模式(cypress run --headed)运行赛普拉斯。 Headless无法与扩展程序配合使用。

随时结帐Synpress,它是Metamask与Cypress的集成: https://github.com/Synthetixio/synpress

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

干杯, 雅各布。