ホームページ > ウェブフロントエンド > jsチュートリアル > Node.js テストで「expect.to.throw」がスローされたエラーをアサートできないのはなぜですか?

Node.js テストで「expect.to.throw」がスローされたエラーをアサートできないのはなぜですか?

Patricia Arquette
リリース: 2024-11-15 15:57:03
オリジナル
220 人が閲覧しました

Why Does `expect.to.throw` Fail to Assert Thrown Errors in Node.js Tests?

Chai: Node.js でのとらえどころのない Expect.to.throw への対処

Chai の Expect.to.throw は、Node では複雑になる可能性があります。 jsのテスト。スローされたエラーをアサートするという本来の目的にもかかわらず、コード スニペットに直接適用すると失敗することがよくあります。

問題の理解:

テスト ケースの例を考えてみましょう:

it('should throw an error if you try to get an undefined property', function (done) {
  // Passing the result of model.get('z') directly fails
  expect(model.get('z')).to.throw('Property does not exist in model schema.');
});
ログイン後にコピー

実際にはエラーがスローされますが、このテストは失敗します。よくある誤解は、expect.to.throw がスローされたエラーの取得とアサーションを処理するということです。

解決策: 関数受け渡しの採用:

これを解決する鍵問題は、結果の代わりに関数をexpect.to.throwに渡すことにあります。この関数は、expect によって実行され、スローされたエラーの取得と検証をトリガーします:

expect(model.get.bind(model, 'z')).to.throw('Property does not exist in model schema.');
ログイン後にコピー

この変更されたコードでは、model.get がモデル オブジェクトのコンテキストにバインドされ、「z」が設定されます。その引数として。次に、結果の関数が Expect.to.throw に渡され、意図したエラーが確実にキャプチャされてアサートされます。

このアプローチに従うことで、Node で Expect.to.throw の機能を最大限に活用できます。 js テストを実行し、スローされたエラーの発生を効果的にアサートし、コードの堅牢性を確保します。

以上がNode.js テストで「expect.to.throw」がスローされたエラーをアサートできないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート