AngularJS 应该测试什么
AngularJS what should be tested
所以我和我的团队正在创建一个 Web 应用程序,我们正在这样做:
- 其中一个负责API:
- api 将为 UI 提供数据,并有可能提供 UI 想要的字段、排序和所有内容,基本上它会过滤所有数据,因此 UI 不必。
- 另一个负责UI:
- UI 将消耗 API 并呈现数据
- 我正在做测试,但我是在代码之后做测试。我测试了 API(phpunit - 单元测试和集成测试)和 UI(jasmine - 单元测试和量角器 - e2e 测试)
那么我真正应该测试什么?
angularJS 上的大多数控制器函数都在获取数据并将其分配给 $scope 那么这些函数值得进行单元测试吗?
控制器方法示例:
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:
另一个问题:在我的情况下(我在代码之后测试,而不是测试驱动开发),我应该只在控制器完成后测试(做它应该做的但可以重构一点)对吧?
它始终取决于项目的预算和复杂性。首先,您自己对该项目的体验可以告诉您哪些地方可以便宜,哪些地方缺乏测试覆盖会花钱,让您抓狂。
感谢 Angular 使控制器单元测试成为现实,机器人大多数时候我会跳过它并留给 e2e,如果您保持控制器薄,则尤其如此。
如果您对后端测试真的很有信心,您可以跳过 $httpBackend
并在服务设计允许的情况下在承诺链上更上一层楼,这是不受欢迎但可行的方案。
所以我和我的团队正在创建一个 Web 应用程序,我们正在这样做:
- 其中一个负责API:
- api 将为 UI 提供数据,并有可能提供 UI 想要的字段、排序和所有内容,基本上它会过滤所有数据,因此 UI 不必。
- 另一个负责UI:
- UI 将消耗 API 并呈现数据
- 我正在做测试,但我是在代码之后做测试。我测试了 API(phpunit - 单元测试和集成测试)和 UI(jasmine - 单元测试和量角器 - e2e 测试)
那么我真正应该测试什么?
angularJS 上的大多数控制器函数都在获取数据并将其分配给 $scope 那么这些函数值得进行单元测试吗?
控制器方法示例:
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:
另一个问题:在我的情况下(我在代码之后测试,而不是测试驱动开发),我应该只在控制器完成后测试(做它应该做的但可以重构一点)对吧?
它始终取决于项目的预算和复杂性。首先,您自己对该项目的体验可以告诉您哪些地方可以便宜,哪些地方缺乏测试覆盖会花钱,让您抓狂。
感谢 Angular 使控制器单元测试成为现实,机器人大多数时候我会跳过它并留给 e2e,如果您保持控制器薄,则尤其如此。
如果您对后端测试真的很有信心,您可以跳过 $httpBackend
并在服务设计允许的情况下在承诺链上更上一层楼,这是不受欢迎但可行的方案。