2015-11-16 232 views
5

我需要为我的JavaScript单页应用程序组织单元测试和端到端测试。我使用AngularJS量角器/黄瓜进行e2e测试,Chai进行单元测试。如何在AngularJS中组织单元测试和e2e测试?

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

我承认这种方法不能按比例增长

是否有重组以这样的方式我写的代码量最少的测试相关的最佳实践,保证测试代码DRY?

回答

6

首先,你应该切换到使用页面对象模式并保持你的页面对象在一个单独的目录下 - 我认为建议调用目录po

这是给你一个样本,项目结构,我们目前有:

$ cd e2e 
$ tree -L 1 
. 
├── config 
├── db 
├── helpers 
├── mocks 
├── po 
└── specs 

config是我们保持我们的protractor CONFIGS特殊的目录 - 可能有多个CONFIGS - 例如,本地测试和测试,例如,。

helpers基本上就是我们的“libs”/“utils”目录。我们保留自定义茉莉花匹配器,辅助功能的附加“辅助”模块。此外,我们有localStoragesessionStorage模块,这些模块是围绕window.localStoragewindow.sessionStorage对象的便利包装。我们保留protractor-http-mock mocks

po是定义页面对象的目录。单独的文件中的每个页面对象。

specs是我们所有规格都存在的地方 - 它们按逻辑组织成子目录。


一些helpers库是made globally available via global,例如:

onPrepare: function() { 
    global.helpers = require("../helpers/helpers.js"); 
    // ... 
}, 

此外,为了使助手和PO进口更加方便,避免遍历目录爬在树上,并以更好地处理嵌套结构,我们已经转而使用requirePO和@迈克尔Radionov建议requireHelper助手功能,请参阅:

我也非常喜欢@finspin提出的想法,使每个页面对象都有一个节点包。

+0

你有任何页面对象的例子吗? –

+0

@GianlucaGhettini是的,我们基本上遵循这里所建议的:https://github.com/angular/protractor/blob/master/docs/page-objects.md。 – alecxe

+0

为单元测试提供类似页面对象的东西是否有意义? – ganqqwerty