我最近开始使用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框架的正确方法 谢谢你的回复。
答案 0 :(得分:2)
如果你使用一个好的Javascript IDE,重构支持将让你一次性完成。
例如,在IDEA中,我可以将光标放在newUsers上并按Shift-F6。然后选中“在注释和字符串中搜索”以获取html中的字符串。
GWT也存在此问题,但您可能没有注意到,因为您对在Java IDE中重构支持感到满意。