最近、AngularJS MVC フレームワークの作業を開始しました。以前は GWT を使用していました。いいえ、これは AngularJS を使用して気付いた問題です。新しいコントローラーの実装を開始すると、最初に受け入れテスト スイートが作成されます。TDD をできる限り練習します。次に、最初の受け入れテストを作成した後、単体テストの作成を開始し、段階的にコントローラーを実装します。それを見てください、あなたのオブジェクトフィールドは、ユニットテスト、E2Eテスト、コントローラーとビューの少なくとも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 をサーバー オブジェクトにマップする必要があります。sitebirks のようなフレームワークを使用すると、これを行うのは非常に簡単です。ただし、クライアントからのオブジェクトを逆シリアル化できるようにするには、クラス名の一貫性を保つ必要があります。この問題が発生するのは私だけですか? 間違っている場合は訂正してください。または、この問題を本当に抱えているのは私だけです。その場合は、JS フレームワークを使用する正しい方法を教えてください。
返信ありがとうございます。