2010-02-16 11 views
8

Mam następujący kod w moim kodzie JavaScript.JavaScript, jak kpić z potwierdzenia metoda

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

Piszę test dla tego kawałka kodu. Jak symulować metodę window.confirm? Próbowałem podążać za kodem, ale nie działało.

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

Mogę przenieść metodę window.confirm do innej funkcji, a następnie mogę wykpić tą metodę. Jednak zastanawiałem się, czy istnieje lepsze rozwiązanie.

Odpowiedz

1

Twój własny kod działa dobrze dla mnie w IE. Tylko po w zasięgu globalnym powinien go zastąpić:

var confirm = function() { return true; } 

EDIT
Widziałem kilka pytań na SO w przeszłości o próbując zastąpić confirm, głównie dlatego, że nie podoba to (i kto by to zrobił?). Jeśli próbujesz ominąć go z tego powodu, sugeruję, aby spojrzeć na zmianę kodu, aby zaimplementować zastępczą funkcję zastępczą w celu potwierdzenia. Spójrz na jQuery UI's modal confirm na dobry przykład tego.

1

Zastanowiłabym się nad implementowaniem wrapperu wokół metod statycznych w oknie (lub innym) obiekcie. Następnie podaj swoje opakowanie do tego, co używa metody statycznej. Oczywiście jest to łatwiejsze, jeśli używasz implementacji opartej na "klasie". Następnie, aby sfałszować metodę, po prostu podaj inną opakowanie, które zwraca wybraną wartość.

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

Używam Jasmine dla testów jednostkowych i Oszukałeś alert i potwierdzić z następującym

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; 
}; 

Wtedy mówię:

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 
    }); 
}); 

To nie jest doskonałe, a ja f masz wiele potwierdzeń, które mogą pojawić się między ustawieniem, które potwierdza, że ​​możesz mieć kłopoty. Być może wtedy dobrze byłoby ustawić sygnał oczekiwanych wartości potwierdzenia powrotu ... podchwytliwe ...

+0

IMO z 3 odpowiedzi do tej pory, ta dotyczy tego, o co pyta Nick. Na dzisiejszym Stackoverflow jest bardzo mało o statycznych kpinach z JavaScriptu oprócz twojej odpowiedzi. –

Powiązane problemy