Jasmine を使用してコントローラーの単体テストを作成していますが、この状況を処理する方法についてコミュニティからフィードバックを得たいと考えていました...
私はコントローラーを持っています-InvoiceController、次のように:
angular.module('myModule').controller('myController', ['$scope',
function($scope) {
$scope.doSomething = function() {
$scope.something = 'bar';
};
}
]});
単体テストでは、コントローラーに期待されるメソッドがあることを確認します。
it('should be able to do some work', function() {
// initialize scope properties
scope.someProperty = 'foo';
// load controller using those properties
injectController();
// do I have all of the functions necessary to do this work?
expect(typeof (scope.doSomething)).toBe('function');
// now execute test
scope.doSomething();
expect(scope.something).toBe('bar');
}
そして最後に、私の html には、次のように ng-click を持つ要素があります。
<button ng-click="doSomehing()">Do Something</button>
良さそうですよね?しかし、誰かが私が間違ったことをキャッチしましたか?
私の ng-click メソッドのつづりが間違っていますが、すべてのテストは緑色で、人生はバラ色のように見えます...その男をクリックしようとしても何も起こらないまで. レンダリング時のエラーも、クリック時のエラーもありません。うーん。
私がコードをリファクタリングしていると、これが私を手に入れました。単体テストとコントローラーで doSomething の名前を doSomethingCooler に変更しましたが、html に場所がありません。頭をかきむしった後、何が見落とされたかがわかります。
マークアップが有効であることを確認する方法が欲しいです。E2E テストは明らかな解決策のようですが、脆弱性が生じやすいため、いくつかの代替手段があることを期待しています。
これが ASP.Net の場合、コード ビハインドからクリック イベントを添付して、コンパイル時エラーと実行時エラーが発生するようにします。
想い??
サッド