2

我正在尝试使用 Electron 构建应用程序。

我需要基于电子环境并使用电子包进行一些单元测试。

这样,我使用 spectron 来模拟我的应用程序。

在文档中,写到我必须将我的可执行文件所在的路径放入“路径”属性中。我现在没有可执行文件,我处于开发模式。

这是我根据另一个问题尝试过的:

beforeEach(() => {
    app = new Application({
        path: 'node_modules/.bin/electron'
    });
    app.start().then(res => console.log(res), err => console.log(err));

});

提示上没有出现任何内容,并且以下测试失败告诉我无法在未定义的对象上获取 getWindowCount(显然,应用程序未实例化):

 it('should call currentWindow', (done) => {
            app.client.getWindowCount().then((count) => {
                expect(count).to.equals(1);
                done();
            });
        });

有人知道我应该在这条路上放什么来使我的测试环境正常工作吗?

PS:我正在使用 mocha chai 和 sinon。

谢谢你的帮助

4

2 回答 2

11

起初我是为了测试目的而创建一个可执行文件,但这实际上没有必要。

您可以看到 Spectron 有一个示例测试和一个全局设置

该示例传递了一个名为args的选项,而这正是您所缺少的。这就是我正在做的事情:

  var appPath = path.resolve(__dirname, '../'); //require the whole thing
  var electronPath = path.resolve(__dirname, '../node_modules/.bin/electron');

  beforeEach(function() {
    myApp = new Application({
      path: electronPath,
      args: [appPath], // pass args along with path
    });

   return myApp.start().then(function() {
     assert.equal(myApp.isRunning(), true);
     chaiAsPromised.transferPromiseness = myApp.transferPromiseness;
     return myApp;
   });
 });

我的测试位于 ./tests/app-test.js 中。以上对我有用。

于 2016-05-20T21:51:44.363 回答
2

如果您使用文档中提到的电子预构建,您还可以为变量路径提供“电子” :

路径 - 必需。要启动的 Electron 应用程序可执行文件的字符串路径。注意:如果您想直接使用应用程序的主脚本调用电子,则应通过 electron-prebuilt 将路径指定为电子,并将应用程序的主脚本路径指定为 args 数组中的第一个参数。

我认为它看起来像这样:

import electron from 'electron'
import { Application } from 'spectron'

describe('application launch', function () {
  this.timeout(10000)

  beforeEach(function () {
    this.app = new Application({
      path: electron,
      args: ['app']
    })
    return this.app.start()
  })
...
}
于 2016-12-17T09:36:22.730 回答