AngularJS应该测试什么

时间:2015-04-08 16:52:18

标签: php angularjs unit-testing testing e2e-testing

所以我和我的团队正在创建一个Web应用程序,我们正在这样做:

  • 其中一人负责API:
    • api将为UI提供服务,将为其提供数据,并且可以提供UI所需的字段,排序和所有内容,基本上它会过滤所有数据,因此UI不需要。
  • 另一个负责用户界面:
    • UI将使用API​​并显示数据
  • 我正在进行测试,但我正在代码之后进行测试。我测试了API(phpunit - 单元测试和集成测试)和UI(茉莉花 - 单元测试和量角器 - e2e测试)

那我该怎么测试?

angularJS上的大多数控制器函数都是获取数据并将其分配给$ scope,所以这些函数值得单元测试吗?

控制器方法示例:

UnidadesOrganicasService.getUnidadesOrganicas().then(function (unidadesOrganicas) {
                $scope.unidadesOrganicas = unidadesOrganicas;
            }, function errorCallback() {
                $scope.showToastError('Occorreu um erro a carregar as unidades orgânicas!');
            });

其他方法基本上与某些依赖于来自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:

另一个问题:在我的情况下(我在代码之后进行测试,而不是测试驱动的开发),我应该只在控制器完成后进行测试(做它应该做的但可以重构一点)对吗? / p>

1 个答案:

答案 0 :(得分:1)

它总是取决于项目的预算和复杂性。首先,这是你自己的项目经验,它可以告诉你哪里可以便宜,而且缺乏测试覆盖将花费你的钱并使你撕裂你的头发。

对Angular的信任使得控制器单元测试真实,机器人大多数时候我会跳过它并将其留给e2e,如果你保持控制器很薄,这尤其正确。

如果您对后端测试非常有信心,那么如果服务设计允许这样做,您可能会跳过$httpBackend并在承诺链上更上一层,这是不可取但可行的情况。