6

ユニットテストのためにnode.jsアサーションによって提供されるアサーションは非常に限られています。最初のテストを作成する前でさえ、私はそれらを再利用し続けることが明らかだったので、すでにいくつかのアサーションを作成していました。

一般的なJavaScriptの状況(オブジェクト構造、オブジェクトクラスなど)をテストするためのアサーションの優れたライブラリをお勧めしますか?

理想的には、nodeunitとうまく統合する必要があります(または、より良いのは、そのアサーションを拡張することです)-私のアサーションはそうではありません、私はそれらtestを追加の変数として渡す必要があります...

私が見たのはチャイだけです。あなたはそれについて何を言うことができますか?

4

5 に答える 5

10

assertまた、構文またはBDDスタイルのアサーション( )のどちらでテストするかは、多少好みの問題ですsmth.must.equal(...)

アサーションスタイルの場合、Chaiのアサーションがうまく機能する可能性があります。ノード独自のassertモジュールよりも多くの組み込みマッチャーがあります。

BDDスタイルがより読みやすく流暢であることがわかった場合は、3つすべてがそれを行います。

さまざまなマッチャーに関しては、主にAPIの単純さまたは複雑さによって異なります。ただし、それらの本質的な平等アサーションは交換可能です—foo.must.equal(42)またはfoo.should.equal(42)

Chai.jsとShould.jsを選択する際に注意する必要があるのは、基本的な設計上の誤りです。つまり、マッチャーを関数として呼び出すのではなく、プロパティアクセスをアサートするという方法です。私は、プロパティへのアクセスと、それがテストで誤検知を引き起こす可能性があることを主張する批評を書きました。

于 2013-10-04T00:56:58.477 に答える
2

私は自分自身のアサーションライブラリ、node-assertthatを使用しています。専門は、非常に流暢に見え、(IMHO)が非常に読みやすい(NUnit for .NETに触発された)構文です。例:

var actual = [...],
    expected = [...];

assert.that(actual, is.equalTo(expected));

基本的には非常にうまく機能しますが、まだ実装されているアサートはそれほど多くありません。それで、それが「良い」かどうかは私が決めません-それはあなた次第です。

これは、構造によるオブジェクトの比較やその他の優れた機能を提供する比較ライブラリを利用します:compare.js

たとえば、オブジェクトが必要で、それらが(値によって)等しいかどうかを知りたい場合は、次のことができます。

cmp.equal(foo, bar)

または短い:

cmp.eq(foo, bar)

オブジェクトを構造ごとに比較することもできます。たとえば、2つのオブジェクトが同じインターフェイスを実装しているかどうかを確認します。あなたはこのようにすることができます

cmp.equalByStructure(foo, bar)

または短い:

cmp.eqs(foo, bar);

繰り返しになりますが、それが「良い」かどうかはあなたに判断させますが、少なくとも私は両方を使用することに非常に満足しています。

PS:StackOverflowはあなた自身のプロジェクトを宣伝する場所ではないことを私は知っていますが、この場合、「お勧めできますか」に対する答えは「私自身のツール」であるため、この場合、答えは私にこれを強制すると思いますMEそれが最適です。したがって、この投稿をスパムと見なさないでください。

于 2013-01-12T15:10:43.197 に答える
2

チャイは素晴らしいです。ノードとブラウザの両方のテストでかなりの数の異なるセットアップを試しましたが、私を満足させるのはMocha + Chai + Sinonだけです。しかし、アサーションライブラリの選択もスタイルの問題であり、私chai.expectはそれがチェーンAPIであることが個人的に好きであり、必要なすべてのメソッド(型の検証、オブジェクトプロパティのチェック、例外など)が必要です。

于 2013-01-12T15:35:45.700 に答える
1

Hamcrestに基づくJavaScriptマッチャーライブラリであるHamjestに興味があるかもしれません。

nodeunit、mocha、jasminなどで使用できるアサーションとマッチャーのフレームワークにとらわれないライブラリを提供します。

Chai、Jasmin、および同様のフレームワークに比べて2つの主な利点があります。

  1. マッチャーをネストして組み合わせることで、非常に表現力豊かなアサーションを作成できます。
  2. アサーションエラーは、アサーションを繰り返すだけでなく、不一致の理由を詳細に説明します(たとえば、どのプロパティが一致しなかったか、どの要素が欠落していたかなど)。

免責事項:私はHamjestの主な著者です。

于 2015-09-29T13:25:18.550 に答える
1

Expectは、NodeJSとブラウザー用の使いやすい拡張可能なアサーションライブラリです。私はそれをMochaで数回使用しましたが、必要なアサーションがあると言えます。ここで使用方法を学ぶことができます。例:

var pi = Math.PI;
expect(pi)
  .toExist()
  .toBeLessThan(4)
  .toBeGreaterThan(3);
于 2016-02-23T20:20:08.850 に答える