Angularjs 量角器在电子测量中的应用
我正在尝试为我使用的应用程序设置单元测试和e2e测试。我已经参考了许多不同的帖子(确实有帮助),但我仍然得到一个我不理解的错误:Angularjs 量角器在电子测量中的应用,angularjs,testing,protractor,electron,Angularjs,Testing,Protractor,Electron,我正在尝试为我使用的应用程序设置单元测试和e2e测试。我已经参考了许多不同的帖子(确实有帮助),但我仍然得到一个我不理解的错误: Message: Error while waiting for Protractor to sync with the page: "angular could not be found on the window" Stacktrace: undefined 我的conf.js文件如下所示: exports.config = { directCo
Message:
Error while waiting for Protractor to sync with the page: "angular could not be found on the window"
Stacktrace:
undefined
我的conf.js文件如下所示:
exports.config = {
directConnect : true,
seleniumAddress: 'http://localhost:4444/wd/hub',
baseUrl:"file://home/me/workspace/testing-project/main.js",
capabilities: {
browserName: "chrome",
chromeOptions: {
binary: "/home/me/.linuxbrew/lib/node_modules/electron-prebuilt/dist/electron",
args: ["--test-type=webdriver"]
}
},
specs: ['todo-specs.js'],
onPrepare: function(){
browser.resetUrl = "file://";
browser.driver.get("file://");
}
};
考虑到上提供的文档,我的印象是我不需要安装任何其他东西(例如Jasmine)。让我惊讶的是,即使到main.js(根据Electron的规范启动应用程序)的路径是正确的,我在弹出的Electron窗口中也看不到任何东西。
你们有没有遇到过这个问题?您解决了吗?量角器设计用于角度应用程序,但您也可以将其用于“非角度”应用程序 如果您在electron应用程序中使用angular,那么它只需查看
ng应用程序
并同步即可
如果你没有使用AngularSite应用程序,你应该设置isAngularSite(false),然后它将不会尝试同步。显然,使用电子二进制文件不足以实际启动你的应用程序。但是,通过为应用程序构建二进制文件并将其链接到conf.js文件中,就可以了。
我已经能够将我的文件缩减为:
conf.js
exports.config = {
seleniumAddress: 'http://localhost:4444/wd/hub',
specs: ['test-spec.js'],
capabilities: {
browserName: "chrome",
chromeOptions: {
binary: "./dist/myAwesomeApp/myAwesomeAppBinary"
}
},
onPrepare: function () {
browser.resetUrl = "file://";
}
};
通过这种方式,无需描述baseUrl
或使用browser.get()
或browser.driver.get()
在Electron中启动应用程序。然而,我宁愿不必构建应用程序二进制文件,但我认为目前不可能实现。量角器与Electron不兼容,因为它无法访问Electron特定的API,并且无法正确控制渲染器。,另一方面,它是专门为电子设计的,并且有一个非常类似于量角器的API。它允许您同时测试主进程和渲染器进程 我不得不从量角器复制一些代码,让它等待Angular 2正确加载。(如果不使用Angular,则忽略不计。)以下是一个工作示例:
const path = require('path');
const electron = require('electron-prebuilt');
var Application = require('spectron').Application
var assert = require('assert')
let appPath = path.join(__dirname, '..', 'dist');
function awaitAngular2(client) {
client.timeoutsAsyncScript(5000);
// From: https://github.com/angular/protractor/blob/master/lib/clientsidescripts.js
// Returns a promise that resolves when all of Angular 2's components are loaded and stable
return client.executeAsync(function(done) {
try {
var testabilities = window.getAllAngularTestabilities();
var count = testabilities.length;
var decrement = function() {
count--;
if (count === 0) {
done();
}
};
testabilities.forEach(function(testability) {
testability.whenStable(decrement);
});
} catch (err) {
done(err.message);
}
});
}
describe('application launch', function () {
this.timeout(10000)
beforeEach(function () {
this.app = new Application({
path: electron,
args: [appPath]
});
return this.app.start().then(() => {
return awaitAngular2(this.app.client);
})
});
afterEach(function () {
if (this.app && this.app.isRunning()) {
return this.app.stop()
}
});
it('shows an initial window', function () {
return this.app.client.getWindowCount().then(function (count) {
assert.equal(count, 1)
})
});
it('shows a headline', function () {
this.app.client.getText('app-banner h1').then(function (bannerText) {
assert.equal(bannerText, 'Tour of Heroes');
})
});
});
如果您有多个要自动运行的.spec文件,那么您可以将其与或Mocha Node.js测试运行程序集成。假设您从
main.js
所在的项目根目录启动量角器,您应该能够设置量角器.conf.js
如下:
exports.config = {
directConnect: true,
capabilities: {
browserName: 'chrome',
chromeOptions: {
binary: 'node_modules/.bin/electron',
args: ['app=main.js']
}
},
onPrepare: function () {
browser.resetUrl = "file://"
}
}
capabilities.chromeOptions.args的选项是传递的electron
。有关功能的更多文档,请参见。应用程序正在main.js调用的index.html文件中使用ng app
(mainWindow.loadUrl(
),但在此之前它甚至失败:index.html从未显示。我尝试了你的解决方案,它解决了同步角度的问题,但是测试失败了,因为html从来没有显示过。碰巧我们可以为此建立一个博客吗?这将是一篇精彩的博文(包含更多细节)!我不认为量角器有任何关于这方面的文档,它可能会帮助电子用户考虑使用量角器。当你创建了一篇博文,在这里用链接回复。谢谢此外,如果您对以下方面有任何见解: