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

标签 angularjs gruntjs yeoman karma-runner

我正在使用 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/

相关文章:

javascript - Angular 路由不适用于具有相同模块名称的 Controller

javascript - 在目录中查找文件,扫描其他目录文件并替换所有出现的文件名

javascript - 使用 Yeoman/Bower 进行脚本引用

gruntjs - 在 yeoman 生成的应用程序中为 API 调用提供 stub

javascript - 如何在我的 angularjs 指令中切换 contenteditable 等属性的值?

javascript - AngularJS 和处理 404 错误

javascript - 从子状态访问子状态

javascript - Grunt PostCSS 编译非常慢

javascript - 如何使用 grunt、http-server 在本地主机中运行 bootstrap

coffeescript - CoffeeScript (eco) 模板中的 Grunt 图像路径