2016-04-08 10 views
0

ユニットテストを実行しているときに、すべてが正常であることがあります。jasmine angularjsテストで一貫性のない結果が得られる

障害のようなものが報告:

Expected spy exec to have been called with [ Object({}) ] but actual calls were [ Object({}) ] 

を私は本当に期待と実際の呼び出しの間に違いを見つけることができません。 (比較ツールを使用)

このコントローラーと他のコントローラーを区別すると、再帰が含まれています。実際のコードは、チェックや、いくつかの機能が呼び出しにアレーが行う処理を途中で停止することがあります

var array = [{id:1}, {id:2}, {id:3}]; 

//first check the entire array 
//then process the entire array 
//then do something after the entire array is processed. 
checkArray(0, array, object).then(function(){ 
    processArray(0, array, object).then(function() { 
    doSomething(object); 
    }); 
}); 

function checkArray(index, array, object) { 
    return $q(function(resolve) { 
    var record = array[index]; 
    //object is altered in doSomeStuff 
    doSomeStuff(record, object).then(function(){ 
     if(++index !== array.length) { 
     return resolve(checkArray(index, array, object)); 
     } else { 
     return resolve(true); 
     } 
    }); 
    }); 
}); 

: は、それは次のように実行された配列とその配列の非同期コード内のすべての項目のために返すデータ・ソース、何かが含まれていますこの場合、エラーポップアップが表示され、オブジェクトの最終状態がユニットテストで比較されます。

しかし、これらの再帰的に実行される関数を使用しない同じコントローラ内で(何らかの理由で)失敗したテストもあります。

しかし、これらのスパイは、呼び出し時にわずかに異なるオブジェクトで実際に呼び出されます。しかしJasmineは呼び出し時にオブジェクトの状態を保持しませんが、その代わりにオブジェクトの最終状態を報告します。 (これは問題ありませんが、実行されたものではありませんが、私は気にしません)

コードは必要に応じて機能しますが、テストは虚偽のエラーなしで一貫して実行したいと思います。 これらのエラーが発生しないようにするにはどうすればよいですか?

(これは他のコントローラとはまったく異なっているので、私はこの再帰が私の問題の原因だと考えています) 配列サイズを1に設定して再帰をなくすと、一貫性のない結果。

答えて

0

私のオブジェクトには、新しいDate()オブジェクトが含まれていました。

秒の差が0.5秒未満であったため、差異として表示されなかったため、多くの場合時間の差は1ミリ秒未満でした。したがって、期待されるオブジェクトと実際のオブジェクトの結果は同じでした。

Dateオブジェクトをランダムな文字列に置き換えることにより、テストは期待どおりに正常に成功しました。

関連する問題