如何在电子应用程序的主进程中对组件进行单元测试?

how to unit test components in main process of an electron app?

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

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

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

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

var clipboard=require('clipboard')

它说找不到 'clipboard' 模块。我想测试需要从电子内部 运行。

我该如何测试?

我尝试使用 electron-mocha,但 nedb 使用的异步模块似乎有问题。 None 插入、更新等调用在测试环境中工作,但在我启动我的应用程序时它们工作正常。

我在这里遗漏了什么吗?

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

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

现在可以使用 spectron 轻松实现端到端测试。

虽然对于单元测试,我们的一些模块可能基于 electron 包,如果我们简单地 运行 使用 node 进行测试,则该包不可用。

你可以很容易地用 proxyquire 存根电子包。确保使用 proxyquire @noCallThru 属性阻止调用 require 原始依赖项,或者像这样 require('proxyquire').noCallThru() 要求 proxyquire。这将确保您的测试甚至不会尝试要求原始依赖项,从而可以 运行 在一个简单的节点进程中进行单元测试。

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