2010-02-16 15 views
8

मेरे पास जावास्क्रिप्ट कोड में निम्न कोड है।जावास्क्रिप्ट कैसे पुष्टि करें विधि

if (window.confirm('Are you sure?')) { 
    AdminData.actOnResult('delete'); 
} 

मैं कोड के इस टुकड़े के लिए परीक्षण लिख रहा हूं। मैं window.confirm विधि का नकल कैसे करूं? मैंने कोड का पालन करने की कोशिश की लेकिन यह काम नहीं किया।

window.confirm = function(arg) { 
    return true; 
}; 

मैं window.confirm विधि को किसी अन्य फ़ंक्शन पर ले जा सकता हूं और फिर मैं उस विधि का नकल कर सकता हूं। हालांकि मैं सोच रहा था कि कोई बेहतर समाधान है या नहीं।

उत्तर

1

आपका स्वयं का कोड IE में मेरे लिए ठीक काम करता है। confirm ओवरराइड करने के लिए कोशिश कर रहा है के बारे में,

var confirm = function() { return true; } 

संपादित
मैंने पहले भी इतने पर कुछ सवाल देखा है ज्यादातर क्योंकि वे पसंद नहीं है: बस वैश्विक क्षेत्र में निम्नलिखित यह ओवरराइड करना चाहिए यह (और कौन करेगा?)। यदि आप इस तरह के कारण से इसे बाईपास करने का प्रयास कर रहे हैं, तो मेरा सुझाव है कि आप पुष्टि के लिए कॉलबैक-आधारित प्रतिस्थापन को लागू करने के लिए अपना कोड बदलना देखें। इस के अच्छे उदाहरण के लिए jQuery UI's modal confirm पर एक नज़र डालें।

1

मैं खिड़की (या अन्य) ऑब्जेक्ट पर स्थिर तरीकों के चारों ओर एक रैपर को लागू करने के बारे में सोचूंगा। फिर स्थिर विधि का उपयोग करने के लिए अपने रैपर प्रदान करें। जाहिर है यदि आप "कक्षा"-आधारित कार्यान्वयन का उपयोग कर रहे हैं तो यह आसान है। फिर, विधि को नकल करने के लिए, बस एक अलग रैपर प्रदान करें जो आपके इच्छित मूल्य को वापस कर देता है।

var windowWrapper = { 
    confirm: function(msg) { return confirm(msg); }, 
    ... 
}; 

var mockWrapper = { 
    confirm: function(msg) { return true; }, 
    ... 
} 

var wrapper = windowWrapper; 
if (test) { 
    wrapper = mockWrapper; 
} 

...

if (wrapper.confirm('Are you sure?')) { 
    AdminData.actOnResult('delete'); 
} 
3

मैं इकाई परीक्षण के लिए जैस्मीन उपयोग कर रहा हूँ और सतर्क मज़ाक उड़ाया और निम्नलिखित

alert = function (alertString) {debug.log('ALERT:', alertString);}; 

var confirmValue = true; //set this before you expect the confirm statement to be shown 
confirm = function (confirmString) { 
    debug.log('CONFIRM:', confirmString, confirmValue); 
    return confirmValue; 
}; 

साथ इस बात की पुष्टि की है तो मैं कह सकते हैं:

describe("test", function() { 
    it('should test true confirm workflow', function() { 
     confirmValue = true; // or false if you like 
     //expect outcomes that would come from any confirms being called with true 
    }); 
}); 

यह सही नहीं है, और मैं एफ आपके पास कई पुष्टिएं हैं जो पुष्टि करने वाली सेटिंग के बीच पॉप हो सकती हैं वैल्यू, आप परेशानी में हो सकते हैं। शायद तो अपेक्षित पुष्टिकरण वापसी मूल्यों का एक क्यू सेटअप करना अच्छा होगा ... मुश्किल ...

+0

अब तक 3 उत्तरों में से आईएमओ, यह पता चलता है कि निक क्या पूछ रहा है। आपके उत्तर के अलावा जावास्क्रिप्ट में स्थिर मॉकिंग के बारे में आज स्टैकओवरफ्लो पर बहुत कम है। –

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