微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在使用Puppeteer测试应用的客户端方面,Puppeteer和Electron有什么区别

如何解决在使用Puppeteer测试应用的客户端方面,Puppeteer和Electron有什么区别

我一直在急于将我的应用程序(作为驱动sqlite数据库的nodejs服务器和提供ui的基于litElement的客户端)之间的混合使用,作为beta版。几天前,我实现了这一目标,现在(很晚才知道)我正在考虑如何构建一个测试框架。但是,我真的很难理解如何最好地测试客户端。我认为是因为我很难从概念上理解框架的两个主要选择。在更详细地介绍之前,让我先从顶级的角度解释应用程序的结构。

在项目根目录下,有三个主目录node_modules,其中包含我引入的所有模块(包括客户端元素的lit-elementweb-components-loader,但请参见下文) )server,其中包含应用程序服务器端的所有代码client包含应用程序客户端的所有代码。我仅在模块安装时运行rollup来“打包”我使用的指令和指令以及web-component-loader并有效地进行树状交换并将其复制到client/libs。因此,我的客户端被编码为假定模块位于libs目录中,而我不需要或没有任何构建阶段。我猜想客户端的根是index.html,它引入了service-worker.jsmain-app.jsmain-app是构成整个客户端应用程序的基于lit-element的组件中树的根。 Nginx是客户端中所有静态文件的Web服务器,但也充当代理的角色,以将以/api开头的所有URL传递到标准节点http Web服务器(甚至没有express,尽管我这样做)使用routerbody-parserfinal-handler模块),它们被传递到各种api处理程序,每个处理程序都是一个单独的javascript文件-尽管这些可以“需要”一些我常用的模块和node_modules目录中的内容

我计划使用jest作为测试环境。对于我的服务器,我认为这很容易。对于我要测试的每个api处理程序,我可以构建一个测试脚本,“需要”我要测试的javascript文件。对于使用sqlite数据库进行测试还是模拟,我有两种想法-我倾向于使用前者,因为我使用的是更好的sqlite3,它完全同步并且非常快。我已经有创建空数据库的脚本,因此不必担心测试隔离。

客户端测试让我感到困惑。我“认为”从本质上讲,玩笑可以与服务器相同的方式运行测试,一次只能运行一个元素。但是,这些元素和我的测试脚本将需要一组“网络平台”的API-其中不仅仅包括lit-element使用的整个影子域和自定义组件。我认为,这是puppeteerelectron所在的地方,那里有相关的jest插件,可以将这些平台api放入测试环境中。但是,这就是我困惑的本质,操纵up的指示全都以类似

的开头
const browser = await puppeteer.launch({headless: true});
const page = await browser.newPage()
await page.goto(SOME URL);

这个URL是什么? -我还必须运行服务器吗?我不能将此片段与运行由笑话控制的测试相关。所有示例似乎都使用webpacktypescript,我都不了解。

我看到的另一个模块是electron,特别是本文,其他所有内容似乎都指向该模块(或相同的文本)。

https://www.ninkovic.dev/blog/2020/testing-web-components-with-jest-and-lit-element

从本文的代码片段中,“好像”就像我想要的那样,但是... 除了在自己的网站上,我找不到很多关于电子的参考文献。在这里,它告诉您使用电子作为构建跨平台应用程序的工具,但是我无处可寻到它的含义-假定您已经知道。我不想让我的单元测试用UI像木偶戏一样无头。

引起我的困惑,以及为什么我不确定如何实现自己想要的。有人可以给我一些关于的提示

  • 我该如何设置操纵er来运行无头测试而无需服务器,或者
  • 什么是电子(我可以用它来 a)运行我的测试 b)向我提供工具来检查我创建的dom元素,以查看是否创建了正确的dom元素)以及它与伪造者有何不同,我可以使用它对我的客户进行无头的测试。

更新

我已经做了一些进一步的挖掘,并开始了解它们之间的差异。让我总结一下我认为我发现的东西。

  • Puppeteer非常适合您的站点的端到端测试。您可以通过在站点首页(或开发测试站点的更可能的场景)中启动随附的伪造者来运行测试,并以编程方式假装自己是可以单击按钮等的用户。您可以使用各种方法包括功能例如document.querySelector(),以检查您的UI是否符合您的想法,或者您可以截屏并与标准版本进行比较。我可以将其用于单元测试,但是我必须运行服务器,为每个测试创建一个测试夹具html页面,然后导航到该页面jest-puppeteer一个内置一些软件包。
  • Electron是用于构建应用程序的平台。我所引用的网址是使用电子创建的测试运行程序jest-electron。因此,担心electron一个麻烦,我应该担心jest-electron

我认为,目前我主要关心的是三种情况下我需要不同的玩笑配置

  • 服务器上的单元测试
  • 在客户端上进行单元测试
  • 对整个应用程序进行端到端测试。

鉴于我只有一个package.json文件和一组node_modules,我需要找出一种方法来拥有三个不同的jest-config.js文件

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。