2014-06-11 6 views
14

मैं तंत्र का परीक्षण कर रहा हूं जिसे एक बार विधि को कॉल करना चाहिए और जैस्मीन के साथ किसी भी बाद की कॉल को रोकना चाहिए, मैं ब्रेकपॉइंट्स को जोड़कर देख सकता हूं कि विधि को दूसरी बार नहीं कहा जा रहा है हालांकि जैस्मीन परीक्षण विफल रहता है। मुझे लगता है कि इसे spy के साथ कई चेक के लिए उपयोग करने के लिए डिज़ाइन नहीं किया गया है।
दी गई स्थिति का उचित समाधान क्या होगा?परीक्षण कैसे किया जाता है यदि विधि केवल एक बार बुलाया गया है और जैस्मीन में दूसरी बार नहीं?

JSfiddle of Code that is being tested मुझे पता नहीं लगा कि जैस्मीन परीक्षण jsfiddle ठीक से कैसे करें (जैस्मीन संस्करण जिसका उपयोग मैं कर रहा हूं 1.3.1 है जबकि परीक्षण टेम्पलेट 1.2.0 पर है)।

it("Invoking OnPreQuery will add event listener for OnTheMoveViewPreLoad event. Triggering OnTheMoveViewPreLoad twice will call getChildrenForMasterRecordList only first time", function() { 
      AddTreeSettingsObjectToBC({ bc: bc, Tree: { IncludeChildren: true} }); 
      ComposeMockPageObjWithObservableFieldsWithChildren(); 
      var preQuerySpy = spyOnEvent(onTheMove.PageDataRoles, 'OnPreQuery'); 
      $(onTheMove.PageDataRoles).trigger('OnPreQuery', { knockoutContextName: 'bc' }); 
      expect('OnPreQuery').toHaveBeenTriggeredOn(onTheMove.PageDataRoles); 
      expect(preQuerySpy).toHaveBeenTriggered(); 
      var getChildrenForMasterRecordListSpy = spyOn(window, 'getChildrenForMasterRecordList'); 
      $(onTheMove.PageDataRoles).trigger('OnTheMoveViewPreLoad', { knockoutContextName: 'bc' }); 
      expect(getChildrenForMasterRecordListSpy).toHaveBeenCalled(); 
      $(onTheMove.PageDataRoles).trigger('OnTheMoveViewPreLoad', { knockoutContextName: 'bc' }); 
      expect(getChildrenForMasterRecordListSpy).not.toHaveBeenCalled(); 
     }); 

कोड है कि परीक्षण किया जा रहा:

टेस्ट इस तरह दिखता है एचटीएमएल

<div data-role="page"></div> 

जावास्क्रिप्ट

var onTheMove = function(){}; 
$.extend(onTheMove,{ 
    NullValue : "null", 
    PageDataRoles : 'div[data-role="page"], div[data-role="dialog"]', 
    OnTheMovePrefix : 'OnTheMove_' 
    }); 

$(document).on('OnPreQuery', onTheMove.PageDataRoles, function (e, options) { 
    var isChildAttachmentQueued = true; 
    var knockoutContextName = options.knockoutContextName; 
    if (TreeEnabled(knockoutContextName)) { 
     var isModelReadyToAttachChildren = function() { 
      var isReady = false; 
      if (PageObj[knockoutContextName] != undefined) { 
       isReady = (PageObj[knockoutContextName]().length > 0) && isChildAttachmentQueued; 
      } 

      return isReady; 
     }; 
     var treeSettings = eval(knockoutContextName).Tree; 
     treeSettings.knockoutContextName = knockoutContextName; 
     $(onTheMove.PageDataRoles).on('OnTheMoveViewPreLoad', function (e, options) { 
      if (isModelReadyToAttachChildren()) { 
       getChildrenForMasterRecordList({ 
        parentTable: eval(knockoutContextName).primaryTableName, 
        knockoutContextName: treeSettings.knockoutContextName, 
        parentIdColumn: treeSettings.ParentIdColumn, 
        masterIdColumn: treeSettings.MasterIdColumn 
       }); 
       isChildAttachmentQueued = false; 
      } 
     }); 
    } 
}); 
function getChildrenForMasterRecordList(options) { 
    console.log('beep'); 
} 

उत्तर

27

अपने आप को यह पता चल, जासूसी संपत्ति callCount कि ऑटो है प्रत्येक कॉल पर एक द्वारा अंतर्निहित।

it("Invoking OnPreQuery will add event listener for OnTheMoveViewPreLoad event. Triggering OnTheMoveViewPreLoad twice will call getChildrenForMasterRecordList only first time", function() { 
     AddTreeSettingsObjectToBC({ bc: bc, Tree: { IncludeChildren: true} }); 
     ComposeMockPageObjWithObservableFieldsWithChildren(); 
     var preQuerySpy = spyOnEvent(onTheMove.PageDataRoles, 'OnPreQuery'); 
     $(onTheMove.PageDataRoles).trigger('OnPreQuery', { knockoutContextName: 'bc' }); 
     expect('OnPreQuery').toHaveBeenTriggeredOn(onTheMove.PageDataRoles); 
     expect(preQuerySpy).toHaveBeenTriggered(); 
     var getChildrenForMasterRecordListSpy = spyOn(window, 'getChildrenForMasterRecordList'); 
     $(onTheMove.PageDataRoles).trigger('OnTheMoveViewPreLoad', { knockoutContextName: 'bc' }); 
     expect(getChildrenForMasterRecordListSpy).toHaveBeenCalled(); 
     $(onTheMove.PageDataRoles).trigger('OnTheMoveViewPreLoad', { knockoutContextName: 'bc' }); 
     expect(getChildrenForMasterRecordListSpy.callCount).toEqual(1); 
    }); 

टिप्पणी

अनुसार जैस्मीन 2.0 में अपने

expect(object.func.calls.count()).toBe(1); 
+11

चमेली 2.0 में, यह थोड़ा बदल गया है। अब आप call.count() ... उदाहरण के लिए जांचते हैं: उम्मीद करें (object.func.calls.count())। ToBe (1); –

संबंधित मुद्दे