2016-11-30 6 views
0

私はモカとチャイに全く慣れていません。私はテストで2つのオブジェクトを比較するための関数を作成しました。モカチャイカスタム比較機能

function compareExtremelyCompexObject (testedObject, trueObject); 

どのようにテストを主張するために私compareExtremelyCompexObject機能を使用していますモカチャイ仕様を書くのですか?私はこのような何かを持っている

it('should create a specific complex object from boilerplate data', function(done) { 
    importDataFromSystem(). 
    .end(function(err, res){ 
      var dummyComplexObject = getBoilerplateComplexObject(); 
      compareExtremelyCompexObject(res, dummyComplexObject); 
      done(); 
     }); 
    }); 
}); 

私は今、複雑なオブジェクトを比較する方法行方不明になるまで発見した例が。 "should"/"expect"で達成できますか?

これが十分明確でない場合は教えてください。私は本当にこの問題を数日間研究してきました。どんな助けにも深く感謝します!

+0

"importDataFromSystemという名前の関数をテストする必要があります。これは、外部システムからデータをインポートして操作し、最終的にはDBに格納するというものです。"あなたはこの仕事をすべてやっている単純な関数を持ってはいけません。文字通りuntestableです。これを少なくとも3つの関数に分割する必要があります。1データをインポートし、データを操作してデータを格納するものに渡します。あなたは3つの関数のそれぞれを簡単にテストすることができます。あなたがしようとしているものは恐らく実行可能ですが、はるかに多くの作業が必要です。 – rule

+0

@rule私は各タスク(インポート、操作、保存)それでも私はプロセス全体(「ディレクター」)をテストする必要があります。私はしない? – Alon

+0

マクロレベルで何か問題が起きる可能性があるので、1つのテストですべてのことを行う1つの関数を文字通りテストしようと考えていました。まあ、あなたは完全なプロセスをテストすることができますが、私はどれくらい難しいか分かりません。本当にそれに関連する有用な情報はありません。 – rule

答えて

0

質問を簡単に編集する必要があると思いますが、私が収集したものから、あなたの新しいオブジェクトをアサートする===カスタム関数を使ってオブジェクトをテストしますか?その場合、compareExtremelyCompexObjectが真または偽を返すと仮定すると、ほぼそこにあります。あなたのコメントを1として

it('should create a specific complex object from boilerplate data', function(done) { 
    importDataFromSystem() 
    .end(function(err, res){ 
      var dummyComplexObject = getBoilerplateComplexObject(); 
      // with assert 
      assert(compareExtremelyCompexObject(res, dummyComplexObject)); 
      // or with chai expect 
      expect(compareExtremelyCompexObject(res, dummyComplexObject)).to.be.true; 
      done(); 
     }); 
    }); 
}); 

、あなたがimportDataFromSystemを連鎖されている方法は、それが流れ、約束や自分自身を返すことを意味します。 'end'のコールバックを呼び出すストリームがresであるとすれば、上記の例がうまくいくはずです。しかし、resがあなたが探しているものでない場合は、約束事を解決し、その結果を連鎖させて操作の同期順序を保証する必要があります。例えば。

it('should create a specific complex object from boilerplate data', function(done) { 

    Promise.resolve() 
    .then(function(){ 
     return importDataFromSystem(); 
    }) 
    .then(function(){ 
     return assert(compareExtremelyCompexObject(getNewlyCreatedObject(), getBoilerplateComplexObject())); 
     // assert should throw error and be caught if the two objects are not equal 
    }) 
    .then(function(){ 
     done() 
    }) 
    .catch(function(err){ 
     done(err); 
    }); 

}); 

しかし、もちろん、あなたがに、いくつかの方法が必要ですが、あなたが作成したオブジェクトを取得します。それは他の議論の全体です。カスタム比較のアサーションを処理するために、質問を編集してサブジェクトを絞り込む必要があります。

関連する問題