Javascriptでテスト駆動開発を学ぶという観点から、ひし形を印刷するための関数を実装しようとしています。
Diamond.prototype.outerSpace = function (current, widest) {
var currentValue = this.getIndexOf(current);
var widestValue = this.getIndexOf(widest);
if (currentValue > widestValue) {
throw new Error('Invalid combination of arguments');
}
var spaces = widestValue - currentValue;
return new Array(spaces + 1).join(' ');
};
エラー処理に問題があります。 currentValueがwidestValueより大きい場合、上記の関数はエラーをスローするはずです。
これは、テスト/仕様を表す私のスニペットです。
it ("should throw an exception, if it is called with D and C", function () {
var outerSpace = diamond.outerSpace.bind(diamond, 'D', 'C');
expect(outerSpace).toThrow('Invalid combination of arguments');
});
Expect(..)の無名関数でも試しましたが、これも機能しませんでした。
コンソールメッセージは次のとおりです。「無効...」をスローする関数が必要ですが、エラー:引数の組み合わせが無効です。
わかりません。この情報をどうすればよいですか。
編集:それはジャスミンv.1.3で動作しているので奇妙ですが、ジャスミンに基づいたコードではありますが、ジャスミンv.2.3、つまりカルマでは動作しませんでした。
TL; DR
Jasmine 2では、マッチャーのセマンティクスが変更され、新しいマッチャーがあります。
toThrowError("<message>")
またはtoThrow(new Error("<message>")))
を使用します
NTL; TR
Jasmine 2.x以降、新しいマッチャーtoThrowError()
があり、JasmineのtoThrow()
が新しいセマンティクスになりました。
toThrow()
は、エラーがスローされたかどうかを確認するか、Error
のメッセージを確認するために使用する必要があります(より具体的には、instanceof Error
)toThrowError()
を使用して、specificエラーがスローされたかどうか、またはエラーのメッセージが期待値と等しいかどうかを確認する必要があります内部的には、toThrow(x)
はスローされたエラーの等価性チェックをx
に対して行います。エラーとx
の両方がinstanceof Error
の場合(たとえば、TypeError
にも当てはまります)、Jasmineは両側のmessage
属性の同等性(一般に===
)をチェックします。
フォームtoThrowError(x)
は、エラーメッセージがx
(文字列または正規表現)と等しいか一致するかをチェックします。
もう1つの形式toThrowError(t, x)
は、エラーのタイプがt
であり、メッセージがx
(文字列または正規表現)と等しいか一致するかどうかを確認します
見る