angularjs - 如何在 AngularJS 中组织单元测试和 e2e 测试?

标签 angularjs unit-testing protractor angularjs-e2e e2e-testing

我需要为我的 JavaScript 单页应用程序组织单元测试和端到端测试。我使用 AngularJS Protractor/Cucumber 进行 e2e 测试,使用 Chai 进行单元测试。

我在两个不同的文件夹(unite2e 文件夹)中有 e2e 和单元测试,我目前没有利用 page object设计模式。这些文件是非结构化的,不共享很多代码,所以我重复了很多次。

我认识到这种方法不会扩大规模

是否有最佳实践以我编写最少代码量的方式重新组织测试,保持测试代码干燥?

最佳答案

首先,您绝对应该切换到使用页面对象模式并将您的页面对象保存在单独的目录下 - 我认为建议调用目录 po .

这是一个示例,我们目前拥有的项目结构:

$ cd e2e
$ tree -L 1
.
├── config
├── db
├── helpers
├── mocks
├── po
└── specs
config是我们保存 protractor 的特殊目录配置 - 可能有多个配置 - 例如,用于本地测试和在 BrowserStack 上进行测试.
helpers基本上,就是我们的“libs”/“utils”目录。我们保留自定义的 jasmine 匹配器、带有辅助功能的附加“辅助”模块。此外,我们还有 localStoragesessionStorage方便包装 window.localStorage 的模块和 window.sessionStorage对象。
mocks是我们保存 protractor-http-mock mocks 的目录.
po是定义页面对象的目录。每个页面对象在一个单独的文件中。
specs是我们所有规范所在的地方——它们在逻辑上被组织成子目录。

一些helpers图书馆是 made globally available via global , 例子:
onPrepare: function () {
     global.helpers = require("../helpers/helpers.js");
     // ...
},

此外,为了使助手和 po 导入更方便,避免遍历树中的目录并更好地处理嵌套,我们已切换到使用 requirePOrequireHelper @Michael Radionov 建议的辅助函数,请参阅:
  • Using require with relative paths

  • 我也很喜欢@finspin 提出的用每个页面对象制作一个节点包的想法。

    关于angularjs - 如何在 AngularJS 中组织单元测试和 e2e 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33739089/

    相关文章:

    AngularJS 在指令中使用常量

    php - AngularJS、PHP 和 MySQL : How to insert variables correctly using PDO?

    javascript - 有没有办法使用 JS 和 AngularJS 获取 HTTP 状态代码名称?

    javascript - 如何在 AngularJS 中发送 HTTP 请求 onbeforeunload?

    c# - 使用 Moq 调用方法时如何验证上下文条件

    java - ArrayList.containsAll 不使用我的自定义 equals 函数

    javascript - 在指定的超时时间内未调用 jasmine 异步回调

    unit-testing - Mbunit 和 Selenium

    angularjs - Protractor -需要放慢 promise 解决

    javascript - 在 Javascript Protractor 测试自动化框架中使用箭头函数