2

nodeunit のエラー メッセージをチェックするアサーションを作成しようとしています。エラー メッセージが期待したものと一致しない場合、テストは失敗します。ただし、このための API は存在しないようです。これが私がやろうとしていることです:

foo.js

function foo() {
  ...
  throw new MyError('Some complex message');
}

foo.test.js

testFoo(test) {
  test.throws(foo, MyError, 'Some complex message');
}

testFooエラーメッセージが「複雑なメッセージ」でない場合は失敗したいと思いますが、それは機能しません。「いくつかの複雑なメッセージ」は、テストの失敗を説明する単なるメッセージのようです。アサーションには関与しません。ノードユニットでこれを行う最良の方法は何ですか?

4

1 に答える 1

2

nodeunit APIの以下のメソッド

throws(block, [error], [message]) - Expects block to throw an error.

[error] パラメータの関数を受け入れることができます。この関数は引数を取り、アサーションの成功または失敗を示すためにactual戻ります。true|false

Errorこのように、あるメソッドが をスローし、そのエラーに特定のメッセージが含まれていることをアサートしたい場合は、次のようなテストを作成する必要があります。

  test.throws(foo, function(err) {
    return (err instanceof Error) && /message to validate/.test(err)
  }, 'assertion message');

例:

function MyError(msg) {
  this.message = msg;
}
MyError.prototype = Error.prototype;

function foo() {
  throw new MyError('message to validate');
}

exports.testFooOk = function(test) {
  test.throws(foo, function(actual) { 
    return (actual instanceof MyError) && /message to validate/.test(actual) 
  }, 'Assertion message');
  test.done();
};

exports.testFooFail = function(test) {
  test.throws(foo, function(actual) { 
    return (actual instanceof MyError) && /another message/.test(actual) 
  }, 'Assertion message');
  test.done();
};

出力:

✔ testFooOk
✖ testFooFail

実際、node.js assert モジュールの関数を実装するテスト フレームワークはすべて、それをサポートしています。例: node.js assertまたはShould.js

于 2015-12-17T09:07:53.447 に答える