Недавно я начал работу с Framework AngularJS MVC. Ранее я работал с GWT. Нет, это проблема, которую я заметил, работая с AngularJS. Когда я приступаю к внедрению нового набора тестов для приемника контроллера, создается в начале, я практикую TDD как можно больше, а затем после того, как вы напишите первый приемочный тест, вы начинаете писать блок-тесты и шаг за шагом реализуете свой контроллер. Проблема, поскольку я см. его, поля ваших объектов должны быть одинаковыми в аренде 4 места в модульных тестах, в тестах E2E, в Controller и View. Это кошмар, чтобы преследовать. Я приведу простой пример того, что я имею в виду. Мне жаль, что я ошибаюсь, и мой подход к работе неправильный, и если так, я надеюсь, что кто-то меня исправит.Дублирование кода в приложении AngularJS
// 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.
Спасибо за ответы.
Что вы подразумеваете под "change the newUsers array"? Изменить ссылку на объект? Изменить имя свойства? – bmleite
изменить имя :) – Adelin
Я не понимаю, это распространенная проблема во всех языках программирования, то есть в Java, если я изменяю имя класса, я должен изменить его везде, где я ссылаюсь на этот класс. В любом случае, я думаю, что это не угловой недостаток. – remigio