2016-08-30 20 views
1

私はユニットテストメソッドAにしようとしています。すべてのメソッドは、メソッドB(urlVarsを取​​得します)を呼び出します。メソッドAからBに返された結果がメソッドAに渡された値と等しい場合はtrueを返し、そうでない場合はfalseを返します。qunitにsinonを使用してスタブを作成する方法がわかりません

function A(result) { 
    if (B()["type"] === result) { 
     return true; 
    } else { 
     return false; 
    } 
} 

function B() { 
    do something 
    } 
    return something; 
} 

私は関数Bが同じ値を返すようにしようとしていますが、私はsinonを使って関数Aに渡しています。助けることができる人は誰ですか?

+0

に統合情報は、あなたがしようとしているかを示すことはできますか? – Jonathan

+0

真正面から始めるべきか、前にサイロンやジャバスクリプトを使用したことがないか分かりません。 –

答えて

0

短い答えは、おそらくこれです:

// just for the example 
 
var result = "test"; 
 

 
// function under test 
 
function A(result) { 
 
    if (B()["type"] === result) { 
 
     return true; 
 
    } else { 
 
     return false; 
 
    } 
 
} 
 

 
//creating the stub 
 
var B = sinon.stub() 
 

 
// sets the return value of the Stub 
 
B.returns({type:result}); 
 

 
// testing the function 
 
console.info(A(result));
<script src="http://sinonjs.org/releases/sinon-1.17.5.js"></script>

長い答えは、ドキュメントhttp://sinonjs.org/docs/#stubsを確認しています。 質問は本当に必要ですかsinonjs、またはあなたはの手番号できませんか?ユニットテストによって

私が最初に常にhandcodeスタブ/モック/ ...だろう、と私はずっと にコーディングまたは私はフレームワークを使用して多くのことを複製し始めます。

更新:ユニットテスト
(私はこれがあまりにも基本的でないことを願う、とあなたの問題を解決するのに役立ちます)

からいくつかの情報私はA機能をテストしていた場合は、I知りたい機能Aがどのようにイメージングしているかを知りたい。だから私は、私は、パラメータtestと機能Aを呼び出した場合、結果はtrueあるべき)テストケース1のテストケース

を作成します。

のTestCase 2)私はパラメータtest1と機能Aを呼び出す場合、結果はfalseでなければなりません。

...など。

問題:私はちょうどBを呼び出すことなく、かつB
ソリューションの機能に頼ることなく、Aからロジックをテストしたい:私は/スタブ/ ...それをモック。

私はそれ(stackoverflowの中、環境)に近づくだろうか。ここ

var passed = "<span style='color:green'>passed</span><br />"; 
 
var failed = "<span style='color:red'>failed</span><br />"; 
 
// Helper UnitTesting framework ;-) 
 
function assertIsEqulaHelper(expected, actual){ 
 
    document.write(expected===actual?passed:failed); 
 
} 
 

 
var B; 
 

 
function testCase1(){ 
 
    B = sinon.stub(); 
 
    B.onCall(0).returns({type:"test"}); 
 
    assertIsEqulaHelper(true, A("test")); 
 
} 
 

 
function testCase2(){ 
 
    B = sinon.stub(); 
 
    B.onCall(0).returns({}); 
 
    assertIsEqulaHelper(false, A("test1")); 
 
} 
 

 

 
// function under test 
 
function A(result) { 
 
    if (B()["type"] === result) { 
 
    return true; 
 
    } else { 
 
    return false; 
 
    } 
 
} 
 

 
testCase1(); 
 
testCase2();
<script src="http://sinonjs.org/releases/sinon-1.17.5.js"></script>

これは、最適化されなければならないだろうが、それはこのように動作することができます。

最終更新:提供されたコード

var expected = true; 
var returnValue = "something"; 
var B = sinon.stub(); 
B.returns({type: returnValue}); 

//Act 
var actual = A(returnValue); //use webm or local 

//Assert 
deepEqual(actual, expected); 
関連する問題