2012-03-22 5 views
0

私はモジュールをテストしています。そのモジュール内で依存関係をモックアウトしたいと思います。私は可能性がある場合、私は、私のシナリオをフレームしてみましょう:だから私のモジュールでこの機能をJasmineやSinonでモックする方法はありますか?

myModule.prototype.func = function(callback) { 
    complexObj.doStuff('foo', function(err) { 
     callback(err, 'stuff'); 
    }); 
}; 

、私は基本的にcomplexObjを模擬しようとしています。この場合、オブジェクト全体を模倣するか、またはdoStuff関数だけを模倣するかは、実際問題ではありません。 doStuffは、Webサービスやファイルシステムとやり取りするようなことをしているとしましょう。 complexObjは、依存性注射によってmyModuleに注射されている。私はJasmineとSinonを使ってこのオブジェクトと機能をモックまたはスタブしようとしていましたが、私は運がなかったので、私はこのようなものに頼りにしました。これはちょっとしたクルジーのようです:

私スペック:

describe('Testing myModule', function() { 
    it('should do stuff', function() { 
     ComplexObj.prototype.doStuff = function(arg, callback) { 
      callback(null); // If no errors, 'doStuff' returns null indicating no errors 
     }; 

     var complexObj = new ComplexObj(); 

     new myModule(complexObj).func(function(err, results) { 
      // Set up expectations... 
     }); 
    }); 
}); 

あなたが見ることができるように、私はComplexObjオブジェクトにdoStuff機能を-mocking 擬似です。私はComplexObjまたはdoStuff関数を心配していないので、私はちょうどにエラーがなかったことを示す「null」のコールバックをfuncに呼び出しています。前にも触れましたが、これを処理するにはより良い方法があるはずです。提案?ジャスミンと

答えて

1

、あなたはこのようなものだろう:

var complexObj = {doStuff: null}; 
spyOn(complexObj, 'doStuff'); 
new myModule(complexObj).func(function(err, results) { 
    expect(complexObj.doStuff).toHaveBeenCalledWith(args, callback); 
}); 

編集:それとも、あなたの嘲笑doStuffに期待を設定することができ:

var complexObj = {doStuff: null}; 
spyOn(complexObj, 'doStuff').andCallFake(function(args, callback) { 
    expect(args).toEqual(/*...*/); 
    expect(callback).toEqual(/*...*/); 
    callback(); 
}); 
new myModule(complexObj).func(function(err, results) { 
    expect(complexObj.doStuff).toHaveBeenCalled(); 
}); 
+0

をそれがexpect' 'することをお勧めしますモックフェイクで? 'doStuff'は決して呼び出されないので、期待が実行されないと仮定すると、誤った前提が生じるでしょう。私は虚偽でヴァースを設定し、その関数を呼び出した後にそのヴァール上のものを期待する傾向があります。 – Giszmo

関連する問題