AngularJS应用程序中的代码重复

时间:2013-01-18 16:07:45

标签: javascript angularjs

我最近开始使用AngularJS MVC框架。我以前和GWT一起工作。不,这是我注意到使用AngularJS的问题。当我开始实现一个新的控制器验收测试套件在开始时创建,我尽可能多地练习TDD,然后写完第一个验收测试后,你开始编写单元测试并逐步实现你的控制器。问题,因为我看看它,你的对象字段应该在单元测试,E2E测试,Controller和View中的至少4个位置相同。这是追逐的噩梦。我将举一个简单的例子说明我的意思。我希望我错了,我的工作方法是错误的,如果是的话,我希望有人纠正我。

// in controller 

     $scope.newUsers = new Array(); // <-- $scope.newUsers should be the same array In unit tests.

        $scope.addUserTobeCreated = function (user) {// <-- functions should be added in the view too
            $scope.newUsers.push(user);
        };

        $scope.createUsers = function () {
            $http.post("some url", $scope.newUsers).success(function () {
              // do something 
            });
        };

// in view 
  <label class="form-input-label">name:</label>
  <input type="text" size="15" maxlength="15" class="form-input-field  ipInput"  ng-model="user.name"> 
<label class="form-input-label">age:</label>
<input type="text" size="15" maxlength="15" class="form-input-field  ipInput"  ng-model="user.age">
<label class="form-input-label">position:</label>
<input type="text" size="15" maxlength="15" class="form-input-field  ipInput"  ng-model="user.position">
   <ul>
        <li ng-repeat="user in newUsers">
            Name:{{user.name}}, Age:{{user.age}}

        </li>
    </ul>

// in unit test

  it("should add user to new users array to be added", function () {
        var user = {name:"ivan"};
        scope.addUserToBeCreated(user);
        expect(scope.newUsers.length).toBe(1); // <-- we have "newUsers" in 4 palces until now. Controller, unit tests, and view 2 times ! . 
        // do some assertions ... 
    });

如果我想更改newUsers数组名称,我必须在4个地方执行此操作!

另外,请考虑将对象传递给接受JSON对象的服务器。在服务器上,我必须将JSON映射到我的服务器对象。像sitebircks这样的框架很容易实现。但是,为了能够反序列化来自客户端的对象,必须保持类名一致。 我是唯一一个看到这个问题的人吗?。如果我弄错了,请告诉我。或者只是我真的有这个问题。如果是这种情况,请指导我使用JS框架的正确方法 谢谢你的回复。

1 个答案:

答案 0 :(得分:2)

如果你使用一个好的Javascript IDE,重构支持将让你一次性完成。

例如,在IDEA中,我可以将光标放在newUsers上并按Shift-F6。然后选中“在注释和字符串中搜索”以获取html中的字符串。

GWT也存在此问题,但您可能没有注意到,因为您对在Java IDE中重构支持感到满意。