dirty-chai
アサーションプロパティを終了するための関数形式。
インストール
npm install dirty-chai --save-dev
使用方法
dirty-chai
は chai の プラグイン です。
var chai = require('chai');
var dirtyChai = require('dirty-chai');
var expect = chai.expect
chai.use(dirtyChai);
// ...
expect(true).to.be.true();
カスタムエラーメッセージ
このプロパティを終了するための関数形式では、アサーションが失敗した場合に表示するカスタムエラーメッセージを提供することもできます。 これは、アサーションがチェーンの途中にあるか、最後にあるかに関係なく機能します。
expect(true).to.be.true.and.not.false('Reason: Paradox');
expect(true).to.be.true('The fabric of logic has torn').and.not.false();
影響を受けるアサーション
このプラグインによって変更され、関数呼び出し形式を使用するようになった組み込みアサーションは次のとおりです。
- ok
- true
- false
- null
- undefined
- exist
- empty
- arguments
- Arguments
注意点
常に関数で終了する
これらの形式を混在させることもできますが、チェーンは常に関数形式で終了する必要があります。そうでない場合、チェーンのその時点までのアサーションは実行されません。
expect(true).to.be.true.and.not.false();
expect(true).to.be.true().and.not.false();
length/arguments のチェーン
これは、他のアサーションに続くチェーンに length
および arguments
アサーションがある場合、両方のアサーションを中断します。 この制限を回避するには、チェーンの最初に length
または arguments
アサーションを実行するか、複数のアサーションステートメントを実行します。
myArray.should.exist.and.should.have.length(3); // Error: length is not a function
// Do two assert statements instead
myArray.should.exist();
myArray.should.have.length(3);
** chai-as-promised との併用 **
chai-as-promised を使用している場合は、dirty-chai の前に chai-as-promised を .use
する必要があります。
var chai = require("chai");
var chaiAsPromised = require("chai-as-promised");
var dirtyChai = require("dirty-chai");
chai.use(chaiAsPromised);
chai.use(dirtyChai);
プラグインアサーション
このプラグインは、他の Chai プラグインによって追加されたプロパティアサーションもフックして変換します。 必要なのは、他のプラグインがロードされる前に dirty-chai をロードして、他のプラグインがロードされる前にフックを配置できるようにすることだけです。
たとえば、dirty-chai の後に sinon-chai をロードすると、そのすべてのプロパティアサーションがメソッドアサーションになります。
spy.should.have.been.called();
spy.should.have.been.calledOnce();
spy.should.have.been.calledTwice();
なぜ?
Chai は、おそらく node で最も人気のあるアサーションライブラリの1つです。 400 を超える依存関係があり、毎月 500,000 件近くダウンロードされています。
スタイル上の理由から、Chai は、パラメータを必要としないアサーションは、プロパティアクセスでアサートするように設計されました。 これにより、これらのアサーションは、これらのアサーションがメソッドであった場合に必要となる空の括弧を省略することができました。
この設計上の決定は、テストにどれだけの信頼を置くことができるかに大きな影響を与えます。特に、TDD のレッドグリーンリファクタリングフローを厳密に守っていない場合はなおさらです。 詳細な理由については、プロパティアクセスでアサートするライブラリに注意してください を読んでください。
JSHint のようなリンターからエラーが発生するという問題もあります。 テストコードをリンティングしている場合、リンターは「代入または関数呼び出しが予想されますが、式が見つかりました」のようなエラーを報告します。 リンターはプロパティゲッターについて知らないため、この行には副作用がないと想定し、誤りがあった場合に備えて警告をスローします。
テストコードは、本番コードと同じくらい、あるいはそれ以上に重要になりつつあるため、これらのエラーを抑制することは良い解決策ではありません。 静的分析を使用してテストで構文エラーをキャッチすることは、テストが明確に定義され、タイプミスがないことを確認するための優れたツールです.
このプラグインは、Chai で記述されたプロジェクトとプラグインの大規模なエコシステムを引き続き活用しながら、テストを信頼できるようにするために記述されました。 組み込みのプロパティアサーションをメソッドアサーションに変換します。これには、プラグインによって追加されたプロパティアサーションも含まれます。
影響を受けるアサーションのリスト、およびプラグインによって追加された多くのアサーションは、アクセス時にすぐにアサートするプロパティゲッターです。 そのため、プロパティアクセスでアサーションチェーンを終了することによって使用されるように記述されました。
expect(true).to.be.true;
foo.should.be.ok;
より良い選択肢は、これらのアサーションに関数呼び出し形式を提供することでした。これにより、コードの意図がより明確になり、リンターが何かおかしいと訴えることがなくなります。 この形式は、既存のプロパティアクセス形式に加えて追加され、既存のテストコードには影響しません。
expect(true).to.be.true();
foo.should.be.ok();