如何使用Yeoman和AngularJS自动化E2E和单元测试?

Jam*_*bri 32 angularjs gruntjs yeoman karma-runner

我正在使用Yeoman和generator-angular来管理AngularJS应用程序,但我在自动化测试方面遇到了麻烦.

运行grunt test将运行一次单元测试.通过改变karma配置块Gruntfile.js,我可以在单元测试后运行E2E测试,添加e2e:

karma: {
  //...
  e2e: {
    configFile: 'karma-e2e.conf.js',
    singleRun: true
  }
},
Run Code Online (Sandbox Code Playgroud)

太棒了:现在当我键入grunt test所有测试时都会运行.但它们只运行一次,并且有很大的开销(启动指南针,运行服务器,启动Chrome进程等).相反,服务器和Chrome进程应该保持运行,当我保存测试时,应该重新运行测试.

我可以通过修改都达到这个karma.conf.jskarma-e2e.conf.js和设置singleRun = true,然后在运行karma start在一个终端窗格,karma start karma-e2e.conf.js在另一个.如果业力配置中的任何端口都没有发生冲突(默认情况下它们会这样做),这是有效的.现在我绕过了Grunt而只是做了我自己的事情(这似乎有点傻,因为Grunt应该让事情变得更容易).

无论如何,经过一些更改(修复?) - 为了简洁而没有详细说明 - 这有效但不会削减它:我现在必须运行两个不同的命令并密切关注两个不同的终端窗格.当然有更好的方法.

如何运行单个命令来观察我的测试文件并重新运行测试?

奖金问题:为什么地球上没有提供此功能?这只是发电机角度开发人员没有足够时间来实现这个问题的问题吗?我问,因为我只是刚刚进入Angular/Yeoman/Karma(你可能已经注意到了),并且觉得E2E和单元测试的自动化测试对于工作流程至关重要.

Ter*_*rry 7

正如我在你的问题评论中提到的 - PhantomJS省去了很多麻烦.除此之外,我相信你可以处理Gruntfile中的所有内容,然后继续运行grunt test以启动整个过程.

grunt-karma允许使用一些方便的附加组件完全自定义您的业力选项.

来自文档:

....

您可以直接覆盖任何配置文件的设置:

karma: {   
  unit: {
    configFile: 'karma.conf.js',
    runnerPort: 9999,
    singleRun: true,
    browsers: ['PhantomJS']   
  }
}
Run Code Online (Sandbox Code Playgroud)

共享配置

如果您有多个目标,则在它们之间共享通用配置设置可能会有所帮助.Grunt-karma通过使用options属性来支持这一点:

karma: {
  options: {
    configFile: 'karma.conf.js',
    runnerPort: 9999,
    browsers: ['Chrome', 'Firefox']
  },
  continuous: {
    singleRun: true
    browsers: ['PhantomJS']
  },
  dev: {
    reporters: 'dots'
  }
}
Run Code Online (Sandbox Code Playgroud)

此外,您可能希望在Yeoman的生成器角度Gruntfile代码中窥探,看看还有哪些可用或至少可模拟.