2017-10-19 5 views
0

assertモジュールを使用して、条件エラーが発生しました。私はdocumentationに基づいていると思われます。assert.fail(message)は、messageプロパティが渡されたメッセージだけの例外をスローするはずです。しかし、それは一重引用符で囲まれ、その後にundefined undefinedというメッセージが設定されています。assert.failからの予期しない結果

assertのバグですか?(1.4.1)を使用していますが、これはドキュメントのバグですか、間違っていますか?

マイコード:

$ cat assert-test.js 
assert = require ("assert") 

try { 
    assert.fail("boom") 
} 
catch (ex) { 
    console.log(ex) 
} 

$ node assert-test.js 
{ [AssertionError: 'boom' undefined undefined] 
    name: 'AssertionError', 
    actual: 'boom', 
    expected: undefined, 
    operator: undefined, 
    message: '\'boom\' undefined undefined', 
    generatedMessage: true } 

これは私に関連すると思われる文書の一部です。メッセージが提供されている場合

のみ、それはエラーメッセージとして使用され、他の引数は、これはまた、関連すると思われるスローオブジェクト

のプロパティとして保存されます。

注:最後の2つのケースは、実際の、予想される、および演算子には、エラーメッセージに影響しません。

assert.fail(); // AssertionError [ERR_ASSERTION]: Failed 

assert.fail('boom'); // AssertionError [ERR_ASSERTION]: boom 

assert.fail('a', 'b'); // AssertionError [ERR_ASSERTION]: 'a' != 'b' 

答えて

1

私はあなたがassert Vで何を意味するのかわからなかったので、私は少し興味があった。assert以来1.4.1は、標準的なノードライブラリの一部です。

実際のNodeバージョンではなく、https://www.npmjs.com/package/assertのように表示されています。ブラウザなどで使用したいからです。

their source code上で見ると、それは彼らがmessageassert.fail()に三番目のパラメータとして提供されていないときだけactualexpectedの連結を印刷する代わりに、現在のノードの動作を模倣しようとしますが、していない明らかです。これがバグか、意図的なものか、現在のバージョンのNodeのすぐ後ろにあるのかどうかは分かりません(ただし、テストに失敗したということは私には疑いがあります)。しかし正しいですが、このモジュールの動作は現在のNode docsと同期していません。(少なくともv.8.6.0では)私のために文書化されています。

+0

私はノードを使いました。私は私が使っていたものを誤解していましたが、あなたが正しくこれをブラウザ(エレクトーン、実際に)とバックエンドで使いたいと思います。私もソースコードを掘り下げていて、標準の 'assert'にするために私が使っていたものを期待して回ってきました。しかし、 'require( 'assert')'は何もインストールせずに動作するはずです。 私は自分のプロジェクトの一部を孤立して処理する技術スタックを学んでおり、現在はユニットテストを書いています。なぜ私の 'assert.fail'例外メッセージが常に間違っていたのか分かりませんでした。 あなたの答えをありがとう! –