15

ディレクティブをテストする必要があり、例外をスローする必要があります。ジャスミンで例外がスローされたことをテストするにはどうすればよいですか?

ディレクティブ リンク機能:

link: function() {
    if(something) {
        throw new TypeError('Error message');
    }
}

実際にエラーをキャッチし、テストが成功したことを報告するテストをまだ正常に実装していません。

4

4 に答える 4

20

これは私がそれを行う方法です:

describe("myDirective", function() {
        it("should throw an error", inject(function ($compile, $rootScope) {
                function errorFunctionWrapper()
                {
                    $compile(angular.element("<div my-directive></div>"))($rootScope);
                }
                expect(errorFunctionWrapper).toThrow();
        }));
});
于 2013-03-11T21:54:22.867 に答える
2

編集:これは現在修正されているようです。Angular 1.6.4 でテスト済み。


Angular 1.6 では、$compileフェーズ中にスローされたエラーをキャッチできませんでした。$exceptionHandler.errorsそれほどエレガントではありませんが、配列 ( source )に対してチェックすることはできます。

it('throws an error', function() {
  $compile(angular.element('<directive-name></directive-name>'))($rootScope.$new());
  expect($exceptionHandler.errors.length).toBeGreaterThan(0);
});

できれば、正確なエラー メッセージを提供してください。

expect($exceptionHandler.errors).toEqual(['first error', 'second error'])
于 2016-12-19T17:03:24.713 に答える