Javascript AngulrJS+;咕噜+;量角器:保持并观察
我目前正在玩E2E测试,我的AngularJS应用程序和Grunt中有一个量角器。 我从开始安装,有两个问题: 第一: 我想知道,如果可能的话,在我的单元测试中有这样的行为:Javascript AngulrJS+;咕噜+;量角器:保持并观察,javascript,angularjs,gruntjs,protractor,Javascript,Angularjs,Gruntjs,Protractor,我目前正在玩E2E测试,我的AngularJS应用程序和Grunt中有一个量角器。 我从开始安装,有两个问题: 第一: 我想知道,如果可能的话,在我的单元测试中有这样的行为: 启动测试服务器 运行所有测试 当测试文件或任何其他html/js文件发生更改时,请重新运行所有测试 我非常喜欢实时观看和自动重新加载的方式,因为它缩短了整个套件的启动时间,并且使一切都变得更快 但使用量角器时,我遇到了一个问题:每次我用Grunt启动测试时,测试都会执行,然后一切都会关闭。尽管如此,我还是在grunfi
- 启动测试服务器
- 运行所有测试
- 当测试文件或任何其他html/js文件发生更改时,请重新运行所有测试
grunfile.js
的量角器配置部分将keepAlive
选项设置为true
。有什么想法吗
第二:
我无法让它工作,无法将量角器连接到我的角度应用程序。我必须启动grunt服务器才能提供文件吗?当我尝试访问测试中的页面时,比如browser.get('app/index.html')代码>或浏览器.get('#/')代码>,我无法访问该页。我已经使用了baseUrl
选项(比如baseUrl:'http://localhost:“+(process.env.HTTP|u PORT | | |“8000”)
)从mydragrator.conf.js
。但在我看来,我必须先启动grunt服务器,对吗?我该怎么做?或者是否有其他选项可用于访问我的angular应用程序?我将sass与compass一起使用,因此我认为,我需要某种方式的compass:dist
taks
更新:
我找到了一个解决办法。我注册了以下grunt任务:
grunt.registerTask('e2e', [
'clean:server',
'concurrent:test',
'autoprefixer',
'connect:test',
'concurrent:server',
'autoprefixer',
'protractor',
'watch'
]);
使用grunt e2e启动时
我的服务器将根据baseUrl:'http://10.0.0.200:9001“
在我的dragrator.conf.js
中,我的测试正在运行。测试完成后,监视
任务监视更改的文件,并在需要时重新运行量角器
这样做的缺点是,每次watch
启动量角器
任务时,都会生成一个新的Chrome实例,并且在测试结束后有没有办法防止量角器杀死Chrome实例?
此外,我想知道为什么在每一个教程中,它总是说“只要运行咕噜量角器,您的测试就可以执行…”为什么启动grunt服务器以访问angularjs应用程序需要额外的任务?
以下是我的配置文件:
dragrator.conf.js
exports.config = {
capabilities: {
'browserName': 'chrome'
},
chromeOnly: true,
specs: ['test/e2e/**/*.js'],
jasmineNodeOpts: {
showColors: true
},
framework: 'jasmine'
};
module.exports = function(grunt) {
// Load grunt tasks automatically
require('load-grunt-tasks')(grunt);
grunt.loadNpmTasks('grunt-protractor-runner');
grunt.initConfig({
// ...
protractor: {
options: {
configFile: "protractor.conf.js",
keepAlive: false,
noColor: false
},
run: {}
},
// ...
});
// ...
grunt.registerTask('test:e2e', [
'clean:server',
'compass:dist',
'compass:server',
'autoprefixer',
'connect:test',
'protractor'
]);
// ...
}
grunfile.js
exports.config = {
capabilities: {
'browserName': 'chrome'
},
chromeOnly: true,
specs: ['test/e2e/**/*.js'],
jasmineNodeOpts: {
showColors: true
},
framework: 'jasmine'
};
module.exports = function(grunt) {
// Load grunt tasks automatically
require('load-grunt-tasks')(grunt);
grunt.loadNpmTasks('grunt-protractor-runner');
grunt.initConfig({
// ...
protractor: {
options: {
configFile: "protractor.conf.js",
keepAlive: false,
noColor: false
},
run: {}
},
// ...
});
// ...
grunt.registerTask('test:e2e', [
'clean:server',
'compass:dist',
'compass:server',
'autoprefixer',
'connect:test',
'protractor'
]);
// ...
}
谢谢
我想知道,如果可能的话,在我的单元测试中有这样的行为:
通常,您不会在每次HTML更改后运行E2E测试。这样做的主要原因是,随着添加越来越多的测试,运行E2E测试可能需要很长时间。因此,为了回答这个问题,我不认为有任何内置方法可以支持在同一浏览器中每次更改后运行E2E测试。我建议使用单元测试作为每次更改后的测试机制,并手动运行E2E测试
我必须启动grunt服务器才能提供文件吗
是的,您需要启动一台服务器来对其运行量角器测试。您不是在启动“grunt服务器”,而是在启动Selenium将使用的web服务器,它是引擎量角器用于测试的服务器。这是使用量角器和ng场景之间的主要区别因素之一
有没有办法防止量角器杀死Chrome实例
再一次,我不相信量角器是这样使用的,因为在每次更改之后,您不需要运行E2E测试。但要回答这个问题,我不这么认为
为什么我需要一个额外的任务来启动grunt服务器来访问angularjs应用程序
关于Selenium,答案与上面相同。为什么我需要额外的任务来启动grunt服务器以访问angularjs应用程序?
由于关注点分离量角器不管理运行测试的web服务器的启动和拆卸,因此这是一种不同于Karma的方法。我认为这是因为测试是在服务器端运行的,在服务器端,web浏览器被“驱动”来执行测试代码中的操作
有没有办法防止量角器杀死Chrome实例?
简短答案编号
答案很长,您可以使用debug
选项在代码中设置断点,但这可能不是您想要的。您尝试的选项仅在测试失败时使浏览器保持活动状态,而在测试结束后不会使浏览器保持活动状态
这可能会引起您的兴趣。有没有办法防止量角器杀死Chrome实例?
我相信您可以通过以下方式暂停浏览器:
browser.pause();
除了我认为正确的答案之外
您试图做的是持续集成,这是一种实践,在这种实践中,每当有人在项目中进行更改和提交时,都会执行整个质量检查(静态代码分析、单元测试、编译/依赖项、E2E测试等)
这不应该在开发人员的环境中执行,应该使用持续集成工具执行,就像我建议您检查它一样,因为它是一个非常有用的工具,它可以运行您需要的所有任务,在出现错误或以前的错误被修复时向您发送消息,甚至你也可以让他在完成后部署最终的生产环境构建在我尝试做完全相同的事情时遇到了这个问题……对gulp来说非常陌生(不确定我是否在做所有事情)