1

QUnit + JsMockitoでJavascriptオブジェクトをテストするときに、メソッド呼び出しアサーションを作成するのに問題があります。基本的なインフラストラクチャは正常に機能しています。Qunit、JsHamcrest(Jsmockito依存関係)、およびJsmockitoはスイート定義で適切に初期化されています。

次のように、引数としてオブジェクトを使用して「dataStore#create」メソッドの呼び出しをアサートしたいと思います。

var store = {create: function(arg) {}};

test("save()", function() {
  var dataStoreMock = mock(store);

  var objectUnderTest = { value: 'aaa',
                        dataStore: dataStoreMock,
                        save: function() {this.dataStore.create({name: this.value});}}

objectUnderTest.save();
verify(dataStoreMock).create({name: 'aaa'});
});

アサーションエラーが発生します:「必要ですが呼び出されません:obj.create([object Object]に等しい)」

私の最初の疑いは、オブジェクトの同等性が期待どおりに機能していないことです。その証拠は、オブジェクトの代わりにプリミティブデータ型を渡す呼び出しでアサーションを使用すると機能することです。

this.dataStore.create(this.value); //actual code
verify(dataStoreMock).create('aaa'); //test

jsHamcrest'equalTo'マッチャー(jsMockitoドキュメントで公開されている)を使用しようとしましたが、成功しませんでした:

verify(dataStoreMock).create(equalTo({name: 'aaa'}));

この種のアサーションを機能させる方法について誰かが何かアイデアを持っていますか?

4

1 に答える 1

1

アサーションはオブジェクトの属性ではなく、オブジェクト自体をチェックしており、JsHamcrest 'equalTo' マッチャーはオブジェクトの詳細な検査を行いません (これは JavaScript の '==' 演算子と同じです)。

オブジェクトであることを簡単に確認できます。

verify(dataStoreMock).create(object());

または、次のように使用できる JsHamcrest マッチャー「hasMember」があります。

verify(dataStoreMock).create(hasMember('name'));

jshamcrest 0.6.4 以降 (または現在の HEAD) を使用している場合は、マッチャーを hasMember の 2 番目の引数として渡すことで、メンバーを確認することもできます。

verify(dataStoreMock).create(hasMember('name', 'aaa'));
verify(dataStoreMock).create(hasMember('name', equalTo('aaa')));
于 2011-05-24T13:56:04.997 に答える