2014-10-02 10 views
12

के साथ मॉक डेट कन्स्ट्रक्टर मैं एक ऐसे फ़ंक्शन का परीक्षण कर रहा हूं जो वैकल्पिक तर्क के रूप में दिनांक लेता है। मैं यह कहना चाहता हूं कि अगर किसी तर्क के बिना फ़ंक्शन को कॉल किया जाता है तो एक नई दिनांक ऑब्जेक्ट बनाई जाती है।जैस्मीन

var foo = function (date) { 
    var d = date || new Date(); 
    return d.toISOString(); 
} 

मैं कैसे दावा करूं कि new Date कहा जाता है?

कुछ इस तरह अब तक, मुझे मिल गया है:

it('formats today like ISO-8601', function() { 
    spyOn(Date, 'prototype'); 
    expect().toHaveBeenCalled(); 
}); 

देखें: https://github.com/pivotal/jasmine/wiki/Spies

+0

जासूस ऐसा मत करो? मुझे यकीन नहीं है कि आपको तारीख का नकल करने की ज़रूरत है। क्या आप वास्तव में चिंतित हैं कि आप एक दिन पहले या कुछ वापस लौटना शुरू कर देंगे? https://github.com/pivotal/jasmine/wiki/Spies –

+2

क्या यह काम करता है? spyOn (विंडो, "तिथि") – HMR

+0

मुझे वास्तव में अलग-अलग तिथियां मिल रही थीं। टाइमज़ोन चीज ... – Rimian

उत्तर

7

क्रेडिट @HMR करने के लिए।

it('Should spy on Date', function() { 
    var oldDate = Date; 
    spyOn(window, 'Date').andCallFake(function() { 
     return new oldDate(); 
    }); 
    var d = new Date().toISOString; 
    expect(window.Date).toHaveBeenCalled(); 
    }); 
+0

ऐसे समाधान के साथ 'डेट.प्रोटोटाइप' को जासूसी के साथ बदल दिया गया है, क्या इसे काम करने की प्रतीक्षा भी है? – tomalec

+2

उपयोगकर्ताओं को, जो * की जैस्मीन * एज संस्करण का उपयोग कर रहे हैं: ' यह ('तिथि पर जासूसी करना चाहिए', function() { वर oldDate = दिनांक; // and.callFake spyOn (खिड़की, 'तिथि') .and.callFake (function() { नई oldDate (वापसी); }); वर घ = new Date() toISOString;। उम्मीद (window.Date) .toHaveBeenCalled(); }); ' –

+0

यह जाने का रास्ता नहीं है !! jasmine.clock() के बजाय –

4

मेरे लिए के साथ काम किया:

spyOn(Date, 'now').and.callFake(function() { 
    return _currdate; 
    }); 
बजाय

.andCallFake ("घुरघुराना-योगदान-चमेली" का उपयोग: "^ 0.6.5", शामिल करने के लिए लगता है कि टेस्ट बात की पुष्टि कैसे लिखा था चमेली 2.0.0)

2

उपयोगकर्ताओं को, जो द एज ऑफ संस्करण उपयोग कर रहे जैस्मीन के लिए:

it('Should spy on Date', function() { 
    var oldDate = Date; 

    // and.callFake 
    spyOn(window, 'Date').and.callFake(function() { 
     return new oldDate(); 
    }); 

    var d = new Date().toISOString; 

    expect(window.Date).toHaveBeenCalled(); 
}); 
22

चमेली उदाहरण से,

jasmine.clock().install(); 
var baseTime = new Date(2013, 9, 23); 
jasmine.clock().mockDate(baseTime); 
jasmine.clock().tick(50) 
expect(new Date().getTime()).toEqual(baseTime.getTime() + 50); 


afterEach(function() { 
    jasmine.clock().uninstall(); 
}); 

jasmine date

1

यह मेरे लिए काम किया

var baseTime = new Date().getTime(); 
spyOn(window, 'Date').and.callFake(function() { 
    return {getTime: function(){ return baseTime;}}; 
});