所以我和我的团队正在创建一个网络应用程序,我们正在这样做:
- 其中一位负责 API:
- api 将为 UI 提供服务,为其提供数据,并有可能提供 UI 想要的字段、排序等等,基本上它会过滤所有数据,因此 UI 不必这样做。
- 另一个负责用户界面:
- UI 将使用 API 并呈现数据
- 我正在进行测试,但我是在编写代码之后进行测试。我测试了 API(phpunit - 单元测试和集成测试)和 UI(jasmine - 单元测试和 Protractor - e2e 测试)
那么我真正应该测试什么?
angularJS 上的大多数 Controller 函数都在获取数据并将其分配给 $scope 那么这些函数值得进行单元测试吗?
Controller 方法示例:
UnidadesOrganicasService.getUnidadesOrganicas().then(function (unidadesOrganicas) {
$scope.unidadesOrganicas = unidadesOrganicas;
}, function errorCallback() {
$scope.showToastError('Occorreu um erro a carregar as unidades orgânicas!');
});
其他方法与一些 if 基本相同,这取决于来自 API 的数据。
服务方式:
this.getUnidadesOrganicas = function () {
return Restangular.all("unidades-organicas").getList({"sort": "acronimo"});
};
所以测试应该是这样的:
- 用 $httpBackend 模拟数据
- 检查范围是否有正确的模拟数据,但这会导致类似这样的结果:
expect($scope.something).toEqual(MockedSomething);
而 http 模拟就是这样:$httpBackend.expectGET('/something').respond(MockedSomething);
我知道 UI 上的 E2E 测试非常重要,但在这种情况下,是否值得为这种方法进行单元测试?或者我应该只测试真正重要的方法,比如微积分方法和类似的方法?
另一方面,在 API 中,大多数功能似乎与集成测试无关,而单元测试似乎更为重要。
我真正的问题是我的想法是否正确以及在这种情况下要测试什么的方向。
编辑 1:
另一个问题:在我的情况下(我在代码之后测试,而不是测试驱动开发),我应该只在 Controller 完成后测试(做它应该做的但可以重构一点)对吗?
最佳答案
它始终取决于项目的预算和复杂性。首先,您自己的项目体验可以告诉您哪些地方可以便宜,哪些地方缺乏测试覆盖会花钱,让您抓狂。
感谢 Angular 使 Controller 单元测试成为现实,大多数时候我会跳过它并将其留给 e2e,如果您保持 Controller 薄,则尤其如此。
如果您对后端测试真的很有信心,您可以跳过 $httpBackend
并在服务设计允许的情况下在 promise 链上更上一层楼,这是不受欢迎但可行的方案。
关于php - AngularJS 应该测试什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29520740/