2013-01-18 2 views
1

Недавно я начал работу с 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.
Спасибо за ответы.

+0

Что вы подразумеваете под "change the newUsers array"? Изменить ссылку на объект? Изменить имя свойства? – bmleite

+0

изменить имя :) – Adelin

+3

Я не понимаю, это распространенная проблема во всех языках программирования, то есть в Java, если я изменяю имя класса, я должен изменить его везде, где я ссылаюсь на этот класс. В любом случае, я думаю, что это не угловой недостаток. – remigio

ответ

2

Если вы используете хорошую Javascript IDE, поддержка рефакторинга позволит вам сделать это за один раз.

Например, в IDEA я могу навести курсор на newUsers и нажать Shift-F6. Затем проверьте «Поиск в комментариях и строках», чтобы также получить строку в html.

Эта проблема существует и с GWT, но тогда вы, вероятно, не заметили, потому что вам было удобно поддерживать рефакторинг в вашей Java IDE.

Смежные вопросы