我正在使用 Yeoman 和 generator-angular管理 AngularJS 应用程序,但我在自动化测试方面遇到了麻烦。
运行grunt test
将运行一次单元测试。通过更改 Gruntfile.js
中的 karma 配置 block ,我可以在单元测试之后运行 E2E 测试。 ,添加e2e:
karma: {
//...
e2e: {
configFile: 'karma-e2e.conf.js',
singleRun: true
}
},
太好了:现在当我输入
grunt test
所有测试都运行。但是它们只运行一次,而且开销很大(启动指南针、运行服务器、启动 Chrome 进程等)。相反,服务器和 Chrome 进程应该保持运行,当我保存测试时,应该重新运行测试。我可以通过修改
karma.conf.js
来实现这一点和 karma-e2e.conf.js
和设置singleRun = true
,然后运行 karma start
在一个终端 Pane 中,和 karma start karma-e2e.conf.js
在另一个。如果 karma 配置中的端口没有冲突(默认情况下会发生冲突),则此方法有效。现在我绕过 Grunt,只做我自己的事情(这似乎有点傻,因为 Grunt 应该让事情变得更容易)。无论如何,在进行了一些更改(修复?)之后——为简洁起见,没有详细说明——这可行但不会削减它:我现在必须运行两个不同的命令并密切关注两个不同的终端 Pane 。肯定有更好的办法。
如何运行单个命令来查看我的测试文件并适本地重新运行测试?
额外的问题:为什么地球上没有按原样提供此功能?这只是 generator-angular 的开发人员没有足够的时间来实现这些东西的问题吗?我问是因为我才刚刚进入 Angular/Yeoman/Karma(您可能已经注意到了),并且觉得 E2E 和单元测试的自动化测试对工作流程至关重要。
最佳答案
正如我在对您的问题的评论中提到的那样 - PhantomJS 节省了很多麻烦。除此之外,我相信您可以在 Gruntfile 中处理所有内容,然后继续运行 grunt test
开始整个事情。
grunt-karma允许使用一些方便的附加组件完全自定义您的 karma 选项。
从文档:
....
You can override any of the config file's settings directly:
karma: { unit: { configFile: 'karma.conf.js', runnerPort: 9999, singleRun: true, browsers: ['PhantomJS'] } }
Sharing Configs
If you have multiple targets, it may be helpful to share common configuration settings between them. Grunt-karma supports this by using the options property:
karma: { options: { configFile: 'karma.conf.js', runnerPort: 9999, browsers: ['Chrome', 'Firefox'] }, continuous: { singleRun: true browsers: ['PhantomJS'] }, dev: { reporters: 'dots' } }
此外,您可能想在 Yeoman 的 generator-angular Gruntfile code 中窥探。看看还有什么可用的或至少是可模拟的。
关于angularjs - 如何使用 Yeoman 和 AngularJS 自动化 E2E 和单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16737518/