node.js - 如何在 Electron 应用程序的主进程中对组件进行单元测试?

标签 node.js unit-testing electron

我有一个具有以下文件夹结构的 Electron 应用程序:

app/js/
     |_ main.js
     |_ myClipboard.js
     |_ view/ 
         |_ render.js

现在 main.js 调用 myClipboard 使用 nedb(文档存储)在本地存储一些用户数据。我想测试 myClipboard 中的逻辑,因为它会涉及一些条件逻辑。

难点在于 myClipboard 需要 electron 提供的剪贴板模块。以下行在测试设置 (jasmine-node) 中失败:

var clipboard=require('clipboard')

它说找不到“剪贴板”模块。我想测试需要从 Electron 内部运行。

我如何测试它?

我尝试使用 electron-mocha ,但 nedb 使用的异步模块似乎有问题。插入、更新等调用均无法在测试环境中运行,但在我启动我的应用程序时它们运行良好。

我在这里遗漏了什么吗?

最佳答案

说到测试 Electron 应用程序,我喜欢:

  • 对一些孤立的模块进行单元测试,
  • 做一些端到端测试以查看应用程序是否作为一个整体工作。

现在可以使用 spectron 相当轻松地实现端到端测试.

但是对于单元测试,我们的一些模块可能基于 Electron 包,如果我们简单地使用 Node 运行测试,这些包是不可用的。

您可以使用 proxyquire 轻松地 stub Electron 包.请务必使用 proxyquire @noCallThru 属性或通过像这样的 require('proxyquire').noCallThru() 要求 proxyquire 来阻止对原始依赖项的调用。这将确保您的测试甚至不会尝试要求原始依赖项,从而可以在简单的 Node 进程中运行单元测试。

另一种解决方案是您利用依赖注入(inject)并确保您的模块不依赖于 electron 包引入的任何内容。

关于node.js - 如何在 Electron 应用程序的主进程中对组件进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36351229/

相关文章:

node.js - 如果距离上次更新的时间是一定的持续时间,则使用 mongoose 进行更新

javascript - InternJS-类型错误 : Cannot read property 'readFile' of undefined

javascript - 如何从 JSON 文件目录向 mongoDB 添加许多记录?

java - JUnit 中的实例变量

javascript - 如何在不等待页面重新加载的情况下为BrowserView切换网站?

electron - Electron :如何在BrowserWindow中打开chrome://inspect特殊URL来调试SharedWorkers

node.js - IISNode 和 Express 3 产生 http 403.13 错误

python - 测试调用重写方法的类中的方法

asp.net-mvc - 开始一个新项目 - 我从哪里开始?

javascript - Electron :在BrowserWindow和呈现的URL之间进行通信(nodeIntegration:false)