2012-01-10 11 views
49

yöntemini kullanıyorum. Jasmine'i kullanmaya yeni başladım, lütfen yeni kullanıcı sorusunu affedin, ancak toHaveBeenCalledWith kullanırken nesne türlerini test etmek mümkün mü?Jasmine'in toHaveBeenCalledWith yöntemi ile

expect(object.method).toHaveBeenCalledWith(instanceof String); 

Bunu yapabileceğimi biliyorum ama argüman yerine dönüş değerini kontrol ediyor.

expect(k instanceof namespace.Klass).toBeTruthy(); 

cevap

43

toHaveBeenCalledWith casusun bir yöntemidir. docs açıklanan gibi Yani sadece casus onları çağırabilir: Ben jasmine.any() kullanarak, daha da soğutucu mekanizma keşfettim

// your class to test 
var Klass = function() { 
}; 

Klass.prototype.method = function (arg) { 
    return arg; 
}; 


//the test 
describe("spy behavior", function() { 

    it('should spy on an instance method of a Klass', function() { 
    // create a new instance 
    var obj = new Klass(); 
    //spy on the method 
    spyOn(obj, 'method'); 
    //call the method with some arguments 
    obj.method('foo argument'); 
    //test the method was called with the arguments 
    expect(obj.method).toHaveBeenCalledWith('foo argument'); 
    //test that the instance of the last called argument is string 
    expect(obj.method.mostRecentCall.args[0] instanceof String).toBeTruthy(); 
    }); 

}); 
+1

Andreas, sen '.toBeTruthy()' eklenen bir neden var mı? Bu gereksiz gibi görünüyor. – gwg

+1

@gwg 'bekliyor (foo)' bir maççı olmadan no-op; hat, toBeTruthy() 'çağrısı olmadan hiçbir şey yapmaz. Kanıt için http://jsfiddle.net/2doafezv/2/ adresine bakın. –

+4

Bu güncel değil; nes.method.mostRecentCall'ın Jasmine 2.0'da ['obj.method.calls.mostRecent()'] (http://jasmine.github.io/2.0/introduction.html#section-Other_tracking_properties) olması gerekiyor. Ayrıca, diğer cevapta açıklandığı gibi, jasmine.any() 'kullanarak, daha açık ve cuterdir. Son olarak, bu cevaba ulaşmak için biraz zaman alır; esasen yazdığınız herşeyi beklediğiniz gibi (obj.method.mostRecentCall.args [0] instanceof String) .toBeTruthy(); 'gerçekten kendinizi açıklamak için gerekli değildir. –

84

, ben okunabilirlik için alt optimal olduğu elle birbirinden bağımsız değişkenleri alarak bulmak olarak. CoffeeScript yılında

:

obj = {} 
obj.method = (arg1, arg2) -> 

describe "callback", -> 

    it "should be called with 'world' as second argument", -> 
    spyOn(obj, 'method') 
    obj.method('hello', 'world') 
    expect(obj.method).toHaveBeenCalledWith(jasmine.any(String), 'world') 
+16

jasmine.any (İşlev) kullanışlı, çok –

+1

Ayrıca referanslar içinde çalışır dikkat edin. örneğin: 'bekliyor (obj.method) .toHaveBeenCalledWith ({done: jasmine.any (İşlev)})'. Çok kullanışlı. – fncomp

+1

bu doğru cevaptır. – Cam