Ξεπερνώντας τα σφάλματα εξάντλησης πόρων στο Google Generative AI με το NodeJS
Φανταστείτε ότι βρίσκεστε στη μέση ενός έργου και βασίζεστε σε αυτό Google Generative AI για να βοηθήσει στην αυτοματοποίηση της δημιουργίας περιεχομένου. Έχετε ρυθμίσει NodeJS SDK και, με ενεργοποιημένο το κλειδί API και τη χρέωση, αναμένετε ότι όλα θα λειτουργούν ομαλά. 🛠️
Στη συνέχεια, ξαφνικά, χτυπάτε έναν τοίχο: Εμφανίζονται σφάλματα "Οι πόροι έχουν εξαντληθεί", αποτρέποντας περαιτέρω πρόοδο. Είναι ένα απογοητευτικό εμπόδιο, ειδικά όταν είστε βέβαιοι ότι τα ποσοστά δεν πρέπει να αποτελούν πρόβλημα σε έναν πληρωμένο λογαριασμό.
Πολλοί προγραμματιστές βρίσκουν αυτά τα σφάλματα μπερδεμένα, καθώς μπορούν να εμφανιστούν ακόμη και όταν μοιάζουν με αυτό ποσοστό τα όρια δεν είναι κοντά στο να επιτευχθούν. Στην πραγματικότητα, μπορείτε ακόμη και να ελέγξετε το Google Cloud Console και ακόμα δεν καταλαβαίνω γιατί συμβαίνει.
Σε αυτό το άρθρο, θα σας καθοδηγήσω στα βήματα προς αποσφαλμάτωση αυτού του σφάλματος, εξηγώντας τι πραγματικά σημαίνει, πιθανούς λόγους για τους οποίους συμβαίνει και πρακτικούς τρόπους επίλυσής του. Ας βουτήξουμε σε αυτές τις λύσεις και ας σας βοηθήσουμε να επιστρέψετε γρήγορα στο σωστό δρόμο. 🔍
Εντολή | Περιγραφή των εντολών προγραμματισμού που χρησιμοποιούνται |
---|---|
googleAiClient.getGenerativeModel() | Αρχικοποιεί το αντικείμενο μοντέλου για ένα συγκεκριμένο μοντέλο Generative AI (σε αυτήν την περίπτωση, gemini-1.5-flash) για τη δημιουργία περιεχομένου. Απαραίτητο για την επιλογή και τον καθορισμό του μοντέλου AI για αιτήματα στο Node.js SDK. |
await model.generateContent(prompt) | Στέλνει ένα αίτημα στο μοντέλο Google Generative AI με μια καθορισμένη προτροπή για τη δημιουργία περιεχομένου. Η λέξη-κλειδί αναμονής διασφαλίζει ότι αυτή η ασύγχρονη κλήση ολοκληρώνεται πριν προχωρήσετε, κάτι που είναι απαραίτητο στις ασύγχρονες λειτουργίες. |
error.response.status === 429 | Ελέγχει την κατάσταση απόκρισης HTTP στο αντικείμενο σφάλματος για να δει αν έχει επιστραφεί ο κωδικός σφάλματος 429 (Πάρα πολλά αιτήματα). Αυτό είναι ζωτικής σημασίας για τον εντοπισμό ζητημάτων εξάντλησης ποσοστώσεων και αντιμετωπίζεται ειδικά για την επανάληψη ή την κατάλληλη καταγραφή του σφάλματος. |
await new Promise(resolve =>await new Promise(resolve => setTimeout(resolve, delay)) | Εισάγει μια καθυστέρηση μεταξύ των προσπαθειών επανάληψης, αναδιπλώνοντας το setTimeout σε μια υπόσχεση για ασυγχρονισμό/αναμονή σύνταξης. Αυτό χρησιμοποιείται συχνά για την υλοποίηση εκθετικής υποχώρησης, επιτρέποντας χρόνο μεταξύ των επαναλήψεων για να αποφευχθεί η συντριβή του διακομιστή. |
delay *= 2 | Εφαρμόζει εκθετική υποχώρηση διπλασιάζοντας την καθυστέρηση μετά από κάθε αποτυχημένη προσπάθεια. Αυτή είναι μια κοινή πρακτική στον χειρισμό αιτημάτων περιορισμένου ποσοστού, αποτρέποντας επαναλαμβανόμενες γρήγορες προσπάθειες. |
jest.mock() | Χρησιμοποιείται στη δοκιμή με το Jest για την κοροϊδία εξωτερικών λειτουργικών μονάδων (όπως το axios) για την προσομοίωση των αποκρίσεων διακομιστή, συμπεριλαμβανομένου του χειρισμού σφαλμάτων. Αυτό είναι απαραίτητο στη δοκιμή μονάδας για τον έλεγχο των αποκρίσεων για τη δοκιμή της λογικής επανάληψης και των σεναρίων σφάλματος. |
axios.get.mockRejectedValueOnce() | Συγκεκριμένα κοροϊδεύει μια αποτυχημένη απάντηση από το axios.get για να επιστρέψει ένα σφάλμα, το οποίο προσομοιώνει την επίτευξη του ορίου ορίου. Αυτή η εντολή αποτελεί μέρος της ρύθμισης σεναρίων δοκιμών για να διασφαλιστεί ότι ο μηχανισμός επανάληψης ανταποκρίνεται σωστά. |
await expect().rejects.toThrow() | Μια μέθοδος δοκιμής Jest για την επαλήθευση ότι μια συνάρτηση παρουσιάζει σφάλμα μετά την επίτευξη του μέγιστου ορίου επανάληψης. Αυτό χρησιμοποιείται για να επιβεβαιώσει ότι η λογική επανάληψης δοκιμής λειτουργεί και χειρίζεται κατάλληλα όλες τις προσπάθειες επανάληψης. |
console.warn() | Καταγράφει προειδοποιήσεις στην κονσόλα, ιδιαίτερα χρήσιμες για την ειδοποίηση όταν γίνονται προσπάθειες επανάληψης. Διαφορετικό από το console.error, χρησιμοποιείται για την ενημέρωση των προγραμματιστών σχετικά με μη κρίσιμα ζητήματα όπως οι προσπάθειες επανάληψης. |
console.error() | Εξάγει μηνύματα σφάλματος στην κονσόλα, ειδικά σε μπλοκ catch, για να ειδοποιεί τους προγραμματιστές για κρίσιμα σφάλματα. Σε αυτό το σενάριο, χρησιμοποιείται τόσο για τον χειρισμό απροσδόκητων σφαλμάτων όσο και για την καθαρή καταγραφή του σφάλματος εξάντλησης ορίου. |
Στρατηγικές για τον χειρισμό σφαλμάτων εξάντλησης ποσοστώσεων τεχνητής νοημοσύνης της Google Generative
Τα σενάρια που παρέχονται αφορούν ένα συγκεκριμένο ζήτημα: την αντιμετώπιση α Google Generative AI σφάλμα όπου οι πόροι έχουν εξαντληθεί, με αποτέλεσμα τον κωδικό κατάστασης 429. Στο Node.js SDK, αυτό το σφάλμα συνήθως προκύπτει όταν έχει συμπληρωθεί το όριο του ορίου αιτήματος, παρά το γεγονός ότι υπάρχει λογαριασμός επί πληρωμή. Το κύριο σενάριο χρησιμοποιεί το GoogleGenerativeAI SDK για να ζητήσετε τη δημιουργία περιεχομένου μοντέλου, με μια συνάρτηση τυλιγμένη σε λογική διαχείρισης σφαλμάτων. Αυτή η ρύθμιση διασφαλίζει ότι κάθε αίτημα που υποβάλλεται στους διακομιστές της Google ελέγχεται για εξάντληση του ορίου και ότι η απόκριση σφάλματος αντιμετωπίζεται με ευγένεια για την αποφυγή ξαφνικών σφαλμάτων ή διακοπών.
Το σενάριο επανάληψης προσφέρει μια αποτελεσματική λύση εφαρμόζοντας ένα μοτίβο "επανάληψης με εκθετική αναδρομή". Εάν παρουσιαστεί σφάλμα 429, αντί να τερματιστεί η διαδικασία, η συνάρτηση σταματά για μια περίοδο, επαναλαμβάνει το αίτημα και διπλασιάζει την καθυστέρηση μετά από κάθε αποτυχία. Αυτή η προσέγγιση επιτρέπει στο πρόγραμμα να προσαρμόζεται αυτόματα σε περιόδους υψηλής ζήτησης χωρίς χειροκίνητη παρέμβαση. Για παράδειγμα, όταν οι διακομιστές του Google AI είναι προσωρινά υπερφορτωμένοι, η στρατηγική backoff διαχωρίζει τα αιτήματα, επιτρέποντας στο σενάριο να συνεχίσει να προσπαθεί χωρίς να αποτύχει αμέσως. 🕰️
Το σενάριο επανάληψης περιλαμβάνει επίσης λεπτομερή χειρισμό σφαλμάτων. Ελέγχει για τη συγκεκριμένη κατάσταση 429 για να κάνει διάκριση μεταξύ σφαλμάτων που σχετίζονται με ποσοστώσεις και άλλων ζητημάτων. Ο χειρισμός σφαλμάτων Τα μπλοκ διασφαλίζουν ότι μόνο σχετικά σφάλματα ενεργοποιούν επαναλήψεις, γεγονός που αποτρέπει τις χαμένες προσπάθειες για κρίσιμες αποτυχίες, όπως σφάλματα ελέγχου ταυτότητας ή παραμέτρους που λείπουν. Αυτή η ιδιαιτερότητα βοηθά τους προγραμματιστές να επικεντρωθούν στην επίλυση του σωστού ζητήματος εμφανίζοντας μόνο σχετικά μηνύματα, όπως προειδοποιήσεις για προσπάθειες επανάληψης ή κρίσιμα σφάλματα για ζητήματα που απαιτούν προσοχή.
Τέλος, οι δοκιμές της μονάδας είναι ζωτικής σημασίας για τη διασφάλιση της αξιοπιστίας. Χρησιμοποιώντας το Jest, δημιουργήσαμε δοκιμές που προσομοιώνουν διάφορες αποκρίσεις από το Google API, συμπεριλαμβανομένων τόσο επιτυχών ολοκληρώσεων όσο και απορρίψεων βάσει ορίων. Με χλευαστικές απαντήσεις, οι δοκιμές αναπαράγουν σενάρια πραγματικού κόσμου, επιτρέποντας στους προγραμματιστές να επαληθεύσουν ότι ο μηχανισμός επανάληψης συμπεριφοράς συμπεριφέρεται όπως αναμένεται. Για παράδειγμα, όταν εκτελούνται πολλά αιτήματα κατά τη χρήση αιχμής, αυτές οι δοκιμές δείχνουν ότι το σενάριο επανάληψης θα χειριστεί αποτελεσματικά τα όρια ορίων. Μαζί, αυτές οι λύσεις διευκολύνουν τη διάγνωση, τη διαχείριση και την αυτόματη απόκριση σε ζητήματα ορίων με το Google Generative AI, εξοικονομώντας χρόνο στους προγραμματιστές και βελτιώνοντας τη σταθερότητα της υπηρεσίας. 🚀
Πώς να αντιμετωπίσετε το σφάλμα "Εξαντλήθηκαν οι πόροι" για αιτήματα GoogleGenerativeAI
Σενάριο Backend με χρήση του Node.js με το Google Generative AI SDK
// Import the Google Generative AI client library
const { GoogleAuth } = require('google-auth-library');
const { GoogleGenerativeAI } = require('google-generative-ai');
// Initialize client with API key and set authentication
const googleAiClient = new GoogleGenerativeAI();
googleAiClient.apiKey = 'YOUR_API_KEY';
// Function to generate content with error handling
async function generateContent(prompt) {
try {
// Retrieve model and execute completion request
const model = googleAiClient.getGenerativeModel({ model: 'gemini-1.5-flash' });
const result = await model.generateContent(prompt);
return result.data; // Return response on success
} catch (error) {
if (error.response && error.response.status === 429) {
console.error("Quota limit reached, retry after some time.");
} else {
console.error("Error generating content:", error.message);
}
}
}
// Example prompt and function call
generateContent('Your AI prompt here').then(console.log).catch(console.error);
Εναλλακτική λύση: Επανάληψη αιτημάτων με εκθετική επιστροφή
Βελτιωμένη δέσμη ενεργειών Node.js με χρήση λογικής επανάληψης
// Import required libraries and set up Google Generative AI client
const { GoogleGenerativeAI } = require('google-generative-ai');
const googleAiClient = new GoogleGenerativeAI();
googleAiClient.apiKey = 'YOUR_API_KEY';
// Function to handle exponential backoff for retrying requests
async function generateContentWithRetry(prompt, retries = 5) {
let delay = 1000; // Initial delay of 1 second
for (let i = 0; i < retries; i++) {
try {
const model = googleAiClient.getGenerativeModel({ model: 'gemini-1.5-flash' });
const result = await model.generateContent(prompt);
return result.data;
} catch (error) {
if (error.response && error.response.status === 429) {
console.warn(\`Attempt \${i + 1} failed due to quota limits. Retrying in \${delay} ms...\`);
await new Promise(resolve => setTimeout(resolve, delay));
delay *= 2; // Exponentially increase delay
} else {
console.error("Unhandled error:", error.message);
break;
}
}
}
throw new Error("All retries failed due to quota limitations.");
}
// Call the function and handle output or errors
generateContentWithRetry('Your AI prompt here').then(console.log).catch(console.error);
Κώδικας δοκιμής με ψευδές σφάλμα εξάντλησης ποσοστώσεων
Δοκιμή μονάδας για επανάληψη μηχανισμού με χρήση Jest
// Import required modules and mock response
const { generateContentWithRetry } = require('./yourModule');
const axios = require('axios');
jest.mock('axios');
describe("generateContentWithRetry", () => {
it("should retry on 429 errors and eventually succeed", async () => {
axios.get.mockRejectedValueOnce({ response: { status: 429 } });
axios.get.mockResolvedValue({ data: "Success after retries!" });
const result = await generateContentWithRetry('Test Prompt');
expect(result).toBe("Success after retries!");
});
it("should throw an error after max retries", async () => {
axios.get.mockRejectedValue({ response: { status: 429 } });
await expect(generateContentWithRetry('Test Prompt')).rejects.toThrow("All retries failed due to quota limitations.");
});
});
Αντιμετώπιση προβλημάτων και διαχείριση της εξάντλησης ορίων στο Google Generative AI
Συναντώντας α Google Generative AI το σφάλμα που σχετίζεται με το "Εξαντλήθηκε ο πόρος" μπορεί να είναι απογοητευτικό, ειδικά όταν αντιμετωπίζετε όρια ποσοστώσεων παρά την ενεργοποίηση της χρέωσης. Αυτό το σφάλμα συνήθως υποδεικνύει ότι τα αιτήματα που αποστέλλονται υπερβαίνουν τα καθορισμένα όρια χρήσης. Ωστόσο, η κατανόηση των διαφόρων τύπων ορίων στο Google Cloud μπορεί να βοηθήσει. Τα όρια του Google API έχουν σχεδιαστεί για να περιορίζουν τη χρήση για να διασφαλίζουν τη σταθερότητα του συστήματος, αλλά αυτά τα όρια είναι συχνά προσαρμόσιμα σε προγράμματα επί πληρωμή. Για τους προγραμματιστές, η κατανόηση του τρόπου και του χρόνου εφαρμογής αυτών των ορίων είναι κρίσιμης σημασίας, ειδικά εάν η εφαρμογή σας βασίζεται σε μεγάλο βαθμό στη δημιουργία δυναμικού περιεχομένου.
Σε περιπτώσεις όπου τα αιτήματά σας υπερβαίνουν το όριο, η πλατφόρμα του Google Cloud παρέχει πολλά εργαλεία για τη διαχείριση και τη διάγνωση αυτών των ορίων. Μια πρακτική προσέγγιση είναι η τακτική παρακολούθηση της χρήσης μέσω του Google Cloud Console, όπου η χρήση ορίου και οι ειδοποιήσεις μπορούν να προσαρμοστούν. Κατάρτιση ειδοποιήσεις που σας ειδοποιούν καθώς πλησιάζετε τα όρια ορίων μπορεί να σας βοηθήσει να αποτρέψετε απότομες διακοπές της υπηρεσίας. Επιπλέον, χρησιμοποιώντας τον πίνακα ελέγχου "Ποσό και χρήση", μπορείτε να παρακολουθείτε ποιες συγκεκριμένες υπηρεσίες καταναλώνουν τους περισσότερους πόρους. Αν διαπιστώσετε ότι το όρια αιτημάτων σε συγκεκριμένα μοντέλα δεν είναι αρκετά υψηλά για τις ανάγκες σας, μπορείτε να εξετάσετε το ενδεχόμενο να τα αυξήσετε ή να βελτιστοποιήσετε τον κώδικά σας για να ελαχιστοποιήσετε τα αιτήματα.
Η βελτιστοποίηση της συχνότητας αιτημάτων μπορεί επίσης να επιτευχθεί με την εφαρμογή μηχανισμών προσωρινής αποθήκευσης ή τη ομαδοποίηση πολλαπλών αιτημάτων προτροπής όπου είναι δυνατόν. Για παράδειγμα, εάν κάνετε επαναλαμβανόμενα αιτήματα με παρόμοια μηνύματα, η προσωρινή αποθήκευση των αποτελεσμάτων μπορεί να μειώσει τη συχνότητα των κλήσεων API. Μια άλλη προσέγγιση για τη βελτιστοποίηση της χρήσης είναι ο προγραμματισμός λιγότερο ευαίσθητων στον χρόνο αιτημάτων API κατά τις ώρες εκτός αιχμής, κάτι που μπορεί να βοηθήσει στην κατανομή του φορτίου. Τέλος, εάν η υπηρεσία εξακολουθεί να αποτυγχάνει να καλύψει τη ζήτησή σας, εξετάστε το ενδεχόμενο να εξερευνήσετε άλλα μοντέλα Google Generative AI με διαφορετικές δομές κόστους και απόδοσης. Αυτές οι προληπτικές στρατηγικές μπορούν να βοηθήσουν στην αποφυγή της εξάντλησης των ποσοστώσεων και να διατηρήσουν την ομαλή λειτουργία του έργου σας. ⚙️
Συχνές ερωτήσεις σχετικά με τον εντοπισμό σφαλμάτων της Google Generative AI Quota Issues
- Τι σημαίνει το σφάλμα "Εξαντλήθηκαν οι πόροι" στο Google Generative AI;
- Αυτό το σφάλμα συνήθως υποδεικνύει ότι τα αιτήματα API σας έχουν υπερβεί το quota όρια που θέτει η Google. Μπορεί να προκύψει ακόμα και αν η χρέωση είναι ενεργοποιημένη.
- Πώς μπορώ να ελέγξω το όριο του API για το Google Generative AI;
- Επισκεφτείτε την Κονσόλα Google Cloud και μεταβείτε στην ενότητα "API και υπηρεσίες", όπου μπορείτε να αποκτήσετε πρόσβαση στη χρήση και τα όριά σας για κάθε API, συμπεριλαμβανομένου του Google Generative AI.
- Γιατί λαμβάνω ένα σφάλμα 429 με ένα πρόγραμμα επί πληρωμή;
- Ο κωδικός κατάστασης HTTP 429 σημαίνει "Πάρα πολλά αιτήματα". Μπορεί να προκύψει εάν συμπληρωθούν συγκεκριμένες ποσοστώσεις ανά λεπτό ή ανά ημέρα, ακόμη και σε προγράμματα επί πληρωμή. Εξετάστε το ενδεχόμενο να ελέγξετε τη σελίδα ορίων και να προσαρμόσετε τις ρυθμίσεις εάν είναι απαραίτητο.
- Πώς μπορώ να εφαρμόσω εκθετική υποχώρηση για αιτήματα Google Generative AI;
- Μπορείτε να χρησιμοποιήσετε μια στρατηγική επανάληψης που αυξάνει την καθυστέρηση μεταξύ κάθε προσπάθειας, όπως διπλασιασμό του χρόνου πριν από κάθε επανάληψη. Για παράδειγμα, ξεκινήστε με καθυστέρηση 1 δευτερολέπτου και μετά περιμένετε 2, 4 και 8 δευτερόλεπτα για κάθε επόμενη επανάληψη.
- Τι πρέπει να κάνω εάν η αίτησή μου χρειάζεται υψηλότερο όριο;
- Στο Google Cloud Console, μπορείτε να ζητήσετε αύξηση του ορίου σας υποβάλλοντας μια φόρμα ή επικοινωνώντας απευθείας με την υποστήριξη της Google, ειδικά εάν το έργο σας έχει υψηλές απαιτήσεις χρήσης.
- Μπορώ να παρακολουθώ τη χρήση του ορίου σε πραγματικό χρόνο;
- Ναι, τα εργαλεία παρακολούθησης του Google Cloud σάς επιτρέπουν να ρυθμίζετε ειδοποιήσεις που σας ειδοποιούν όταν η χρήση του ορίου φτάσει σε ένα καθορισμένο όριο.
- Ποιος είναι ο σκοπός της προσωρινής αποθήκευσης με το Google Generative AI;
- Η προσωρινή αποθήκευση σάς επιτρέπει να αποθηκεύετε προσωρινά τις απαντήσεις που ζητάτε συχνά, μειώνοντας τον αριθμό των κλήσεων API και επομένως ελαχιστοποιώντας την κατανάλωση ορίου.
- Η εφαρμογή παρτίδας μειώνει τη χρήση των ποσοστώσεων;
- Ναι, τα ομαδικά αιτήματα μπορούν να βελτιστοποιήσουν τη χρήση πόρων ομαδοποιώντας πολλαπλά μηνύματα προτροπής σε μία κλήση API, ειδικά εάν γίνονται συχνά παρόμοια ερωτήματα.
- Πώς μπορώ να βελτιστοποιήσω τη χρήση του API για ώρες εκτός αιχμής;
- Προγραμματίζοντας μη επείγοντα αιτήματα σε ώρες εκτός αιχμής, μπορείτε να κατανείμετε το φορτίο ομοιόμορφα και να αποφύγετε τα όρια χρήσης κατά τις ώρες αιχμής.
- Ποιες εναλλακτικές είναι διαθέσιμες εάν υπερβώ τα όρια ποσόστωσης;
- Εάν το έργο σας εξακολουθεί να απαιτεί περισσότερους πόρους, μπορείτε να εξερευνήσετε χρησιμοποιώντας διαφορετικά μοντέλα ή τερματικά σημεία API που έχουν επιλογές υψηλότερης χωρητικότητας στο Google Generative AI.
Βασικά στοιχεία για τη διαχείριση σφαλμάτων ποσοστώσεων τεχνητής νοημοσύνης της Google Generative
Ο εντοπισμός σφαλμάτων των σφαλμάτων εξάντλησης ορίου είναι απαραίτητος για τη διασφάλιση αξιόπιστων αλληλεπιδράσεων API. Παρακολουθώντας τα όρια ορίων στο Google Cloud Console, ορίζοντας ειδοποιήσεις και βελτιστοποιώντας τα αιτήματα, οι προγραμματιστές μπορούν να αντιμετωπίσουν προληπτικά ζητήματα "Εξαντλήθηκαν οι πόροι" και να βελτιώσουν την απόδοση της εφαρμογής τους.
Πρόσθετες πρακτικές όπως η λογική επανάληψης δοκιμής, η ομαδοποίηση αιτημάτων και η συχνά χρησιμοποιούμενη προσωρινή αποθήκευση ζητούν περαιτέρω βελτιστοποίηση της χρήσης πόρων. Μαζί, αυτές οι στρατηγικές εξουσιοδοτούν τους προγραμματιστές να ξεπερνούν αποτελεσματικά σφάλματα που σχετίζονται με ποσοστώσεις, διατηρώντας τις εφαρμογές σταθερές και να εκτελούνται χωρίς διακοπές. 🚀
Πηγές και αναφορές για τον εντοπισμό σφαλμάτων Google Generative AI Quota Error
- Η τεκμηρίωση του Google Cloud Console παρέχει λεπτομερείς πληροφορίες σχετικά με την παρακολούθηση και την προσαρμογή των ορίων API: Google Cloud Console - Ποσοστώσεις
- Επίσημη τεκμηρίωση της Βιβλιοθήκης πελατών του Google Node.js, η οποία περιγράφει τη χρήση, τον χειρισμό σφαλμάτων και τις βέλτιστες πρακτικές για την ενσωμάτωση του Google Generative AI: Τεκμηρίωση Google Node.js SDK
- Οδηγός για την εφαρμογή εκθετικών μοτίβων backoff για αποτελεσματική διαχείριση αιτημάτων API περιορισμένου ρυθμού: Google Cloud Blog - Εκθετική ανατροπή και νευρικότητα
- Τεκμηρίωση Jest testing για χλευαστικές απαντήσεις και προσομοίωση συμπεριφοράς API κατά τη διάρκεια δοκιμών μονάδας: Jest Documentation - Mock Functions