2012-05-16 22 views
17

私は問題を再現する完全な単純化された例を作成しました。 )( [[ 'こんにちは'、< jasmine.any(ファンクション機能:jasmine.any(Function)を動作させることができません

はスパイがで呼び出されていることが予想:代わりに渡してユニットテストの

function TestObj() { 
    var self = this; 
    self.getStuff = function(aString, callback) { 
     // TODO 
    } 
} 

describe("server communications", function() { 
    it("it calls the server", function() { 
     var obj = new TestObj(); 
     obj.getStuff = jasmine.createSpy(); 
     // swap the above line for this and it makes no difference 
     // spyOn(obj, "getStuff"); 

     var functionVar = function() { 
     }; 

     obj.getStuff("hello", functionVar); 

     expect(obj.getStuff).toHaveBeenCalledWith(
       [ "hello", jasmine.any(Function) ]); 
    }); 
}); 

、私は次の出力を得ます{[ネイティブコード]})>]] しかしと呼ばれた。 [[ 'ハロー']

なぜ、それが機能私は(関数(){}を渡すことを認識されていない機能)実際には機能しているtions?それはネイティブコードは何を期待している?誰もがjasmine.any(Function)でこの問題を抱えていましたか?ありがとうございました!

EDITED

IはspyOn代わりにjasmine.createSpyを(使用してみました)、それは違いはありません。私はただ一つの引数を試して、それは動作します。最初の文字列引数を導入すると、jasmine.any(Function) - 任意のアイデアが破られますか?

答えて

31

ああ、私はあなたが引数sの範囲である。Array[]expect().toHaveBeenCalledWithである。愚かな私。ここには有効なバージョンがあります:

function TestObj() { 
    var self = this; 
    self.getStuff = function(aString, callback) { 
     // TODO 
    } 
} 

describe("server communications", function() { 
    it("it calls the server", function() { 
     var obj = new TestObj(); 
     obj.getStuff = jasmine.createSpy(); 
     // swap the above line for this and it makes no difference 
     // spyOn(obj, "getStuff"); 

     var functionVar = function() { 
     }; 

     obj.getStuff("hello", functionVar); 

     expect(obj.getStuff).toHaveBeenCalledWith("hello", jasmine.any(Function)); 
    }); 
}); 
7

問題はspyOnが期待通りに動作しているようです使用して、あなたはスパイを作成する方法です。

describe("test", function() { 
    return it("is function", function() { 
    var a = {b: function(){}}; 
    spyOn(a, 'b'); 
    a.b(function(){}); 
    expect(a.b).toHaveBeenCalledWith(jasmine.any(Function)); 
    }); 
}); 

渡された値が関数である場合にもwrite your own Matcherテストすることができます:

describe('test',function(){ 
    it('is function',function(){ 

    this.addMatchers({ 
     isFunction: function() { 
     return typeof this.actual === 'function'; 
     } 
    }); 
    expect(function(){}).isFunction(); 
    }); 
}); 

EDITED:最初のコードチャンクをコード化

+0

私のオリジナルの回答を編集してください。私はspyOnを試しました - 違いはありません。複数の議論をする例がありますか? –

+0

nevermind - それを修正しました。ご回答有難うございます。 –

関連する問題