Πώς να δοκιμάσετε τον κωδικό JavaScript χρησιμοποιώντας το QUNIT. Δοκιμές δοκιμών JavaScript HTML JavaScript

Μόλις, ο φίλος μου εξέφρασε την αμηχανία του για το πώς η γλώσσα JavaScript μπορεί γενικά να χρησιμοποιηθεί για να γράψει σοβαρά εταιρικά προϊόντα, επειδή δεν έχει έναν μεταγλωττιστή. Στην πραγματικότητα, ο καθοριστικός ρόλος στη δημιουργία ενός κωδικού ποιότητας δεν είναι το γεγονός της παρουσίας ενός μεταγλωττιστή για τη γλώσσα προγραμματισμού, αλλά μια κατάλληλα επιλεγμένη και καλά διαμορφωμένη τεχνική διαδικασία δημιουργίας ενός συστήματος λογισμικού.

Αυτή η διαδικασία θα πρέπει να περιλαμβάνει ένα σύνθετο εργαλείων ελέγχου ποιότητας και απόδοσης προγραμματισμού. Τέτοια μέσα μπορούν να είναι: οι δοκιμές αρθρωτής και ολοκλήρωσης, συνεχής ενσωμάτωση (συνεχής ενσωμάτωση, CI), συλλογή και ανάλυση μιας ποικιλίας μετρήσεων (για παράδειγμα, πολύ μεγάλες μεθόδους στο NDEPEND), ελέγξτε για τη συμμόρφωση με τις απαιτήσεις του JSlint, FXCOP κ.λπ.

Σε αυτό το άρθρο, θέλω να πω πώς να εκτελέσετε σωστά τις αυτόματες αρθρωτές και ολοκληρωμένες δοκιμές του προϊόντος σας στο JavaScript. Στην πραγματικότητα, από αυτή την άποψη, η γλώσσα JavaScript δεν είναι θεμελιωδώς διαφορετική από την Java ή C #.

Agile, TDD και BDD

Συνήθως συνιστώνται αυτόματα δοκιμές αρθρωτών και ολοκλήρωσης για τη δημιουργία για εκτελεσθείσες λειτουργικές, προκειμένου να μειωθεί ο κίνδυνος σφαλμάτων παλινδρόμησης κατά την αλλαγή του κώδικα στο μέλλον. Στην περίπτωση της JavaScript, οι δοκιμές αυτές μπορούν να απλοποιήσουν σημαντικά τις δοκιμές απόδοσης του συστήματος σε διάφορα προγράμματα περιήγησης με αυτοματοποίηση δράσεων για να εξασφαλιστεί η επαλήθευση αυτή. Επιπλέον, η καλή εξυπηρέτηση μπορεί να εξυπηρετήσει τη σύνταξη μιας δομοστοιχειωτών ή δοκιμής ολοκλήρωσης για κάθε κλειστό σφάλμα στο προϊόν.

Υπάρχουν επίσης τεχνικές προγραμματισμού που απαιτούν την εκκίνηση της λογικής που κωδικοποιούν από τη σύνταξη μιας αρθρωτής δοκιμής: ανάπτυξη δοκιμής (TDD) και ανάπτυξη συμπεριφοράς (BDD). Χρησιμοποιούνται συχνά στην ευκίνητη διαδικασία. Εξετάστε τα χαρακτηριστικά τους περισσότερο.

Ανάπτυξη δοκιμών

Η ανάπτυξη μέσω δοκιμών είναι ένας επαναληπτικός κώδικας γραφής κώδικα, η οποία επαναλαμβάνει τα ακόλουθα τέσσερα βήματα:

Βήμα 1. Πριν προσθέσετε ένα νέο λογικό θραύσμα, δημιουργήστε μια αρθρωτή δοκιμή για να επαληθεύσετε αυτή τη λογική.

Βήμα 2.. Εκτελέστε τη δοκιμή και βεβαιωθείτε ότι αυτός δεν περνάει;

Βήμα 3.. Γράψτε τον πιο εύκολο κώδικα που θα εκτελέσει την εκτέλεση της δοκιμής επιτυχώς.

Βήμα 4.. Επεξεργαστείτε τον κώδικα σύμφωνα με τις απαιτήσεις ποιότητας, αφαιρέστε τον κώδικα αλληλεπικάλυψης και βεβαιωθείτε ότι η δοκιμή είναι επιτυχής.

Κάτω από τη δομοστοιχειωτή δοκιμασία κατανοείται ως ένας κώδικας που δοκιμάζει τη λειτουργία κάποιου συστατικού (ενότητα) σε ένα απομονωμένο μέσο. Σύμφωνα με τη δοκιμή ολοκλήρωσης είναι ένας κώδικας που δοκιμάζει τη συνεργασία διαφόρων εξαρτημάτων. Για να ελέγξετε την ενότητα σε ένα απομονωμένο μέσο στην περίπτωση που εξαρτάται από άλλες μονάδες, ισχύουν "Διπλές" (δοκιμές διπλό).

Δοκιμάστε διπλό.

Η κατανομή των βοηθητικών αντικειμένων που χρησιμοποιούνται σε αρθρωτές δοκιμές, στην κατηγορία παίρνει την αρχή του με το βιβλίο των μοτίβων δοκιμών Xunit Gerard Mesason (Gerard Meszaros). Αυτές οι κατηγορίες γενικεύονται που ονομάζονται "Δοκιμαστικοί διπλασιασμένοι" (δοκιμάστε διπλό). Οι βουλευτές είναι οι ακόλουθοι τύποι:

  • Απομίμηση;
  • Ανδρείκελο.

Στέλεχος. Τιμές εξόδου Για το οποίο καθορίζετε εκ των προτέρων. Χρησιμοποιείται για να μιμείται τη διεπαφή του εξαρτημένου συστατικού.

Κοροϊδεύω.- Αυτό είναι βοηθητικό αντικείμενο, η ΣΥΜΠΕΡΙΦΟΡΑ που έχει οριστεί εκ των προτέρων. Χρησιμοποιείται για να μιμηθεί τη διεπαφή του εξαρτημένου στοιχείου και να ελέγξει κατά τη διάρκεια της δοκιμής εάν χρησιμοποιείται σωστά.

Κατάσκοπος- Πρόκειται για ένα βοηθητικό αντικείμενο για την επιθεώρηση των μεθόδων που ονομάζονται και μεταδίδονται παραμέτρους κατά τη διάρκεια της δοκιμής.

Απομίμηση- Πρόκειται για ένα βοηθητικό αντικείμενο που εφαρμόζει τη διεπαφή του εξαρτώμενου συστατικού σε απλοποιημένη μορφή. Για παράδειγμα, για τους σκοπούς των αρθρωτών δοκιμών, μπορείτε να ξεκινήσετε μια βάση δεδομένων στη μνήμη αντί για μια σχεσιακή βάση δεδομένων, η οποία χρησιμοποιείται στην έκδοση εργασίας του προϊόντος.

Ανδρείκελο- Πρόκειται για ένα βοηθητικό αντικείμενο, μια ένδειξη ή μετάδοση του οποίου απαιτείται από τη μέθοδο υπογραφής ή οποιαδήποτε άλλη σύμβαση, αλλά η πραγματική αξία δεν χρησιμοποιείται ποτέ.

Η διαφορά μεταξύ του στέμματος και των ψεύδεται στη μέθοδο ελέγχου των αποτελεσμάτων της δοκιμής. Στην περίπτωση της STU, η κατάσταση του αντικειμένου ελέγχεται στο τέλος της δοκιμής. Στην περίπτωση της κοπής, κατά τη διάρκεια της δοκιμής, το αντικείμενο χρησιμοποιείται ακριβώς όπως περιγράφεται κατά την εγγραφή. Λεπτομέρειες μπορούν να βρεθούν από τη σημείωση Mocks Aren "t Stubs Martin Fowler (Martin Fowler) και θα δώσω εδώ μόνο ένα παράδειγμα.

Στέλεχος. Κοροϊδεύω.
"Connect Connect θα πρέπει να ξεκινήσει τη δημοσκόπηση": λειτουργία () () (this.client.url \u003d "/ my / url", sinon.stub (ajax, "δημοσκόπηση"). Επιστρέφει (()). This.Client.Connect (()); ) · sinon.assert.Calledwith (ajax.poll, "/ my / url");). "Connect Connect θα πρέπει να ξεκινήσει τη δημοσκόπηση": λειτουργία () (this.Client.url \u003d "/ my / url", var mock \u003d sinon.mock (ajax) mock.expececs ("δημοσκόπηση") .Withargs ("/ My / URL ") .returns (()); this.Client.connect (); mock.verify ();)

Ανάπτυξη που βασίζεται στη συμπεριφορά

Μια επαναληπτική προσέγγιση στην ανάπτυξη του λογισμικού μέσω της εφαρμογής των λειτουργικών απαιτήσεων είναι ένα ήδη γνωστό στυλ ανάπτυξης μέσω δοκιμών προσανατολισμένων δοκιμών. Στη διαδικασία BDD, εκτελούνται διαδοχικά τα ακόλουθα τρία στάδια:

Βήμα 1. Προσδιορισμός των λειτουργικών απαιτήσεων για την ρευστοποιήσιμη ενότητα με τη μορφή δοκιμών.

Βήμα 2.. Κωδικοποίηση της μονάδας.

Βήμα 3.. Έλεγχος ότι όλες οι επιθυμίες του πελάτη ή των επιχειρηματικών αναλυτικών στοιχείων () γίνονται ελέγχοντας τα αποτελέσματα των δοκιμών.

Κατά τη σύνταξη των δοκιμών στο στυλ BDD, είναι πολύ βολικό να χρησιμοποιείτε χειροκίνητα αντικείμενα λόγω του γεγονότος ότι αντικατοπτρίζουν τέλεια τις απαιτήσεις για το λειτουργικό μέρος για το στοιχείο. Έτσι, οι δοκιμές στη διαδικασία BDD μπορούν να χρησιμεύσουν ως επίσημη παρουσίαση του προβλήματος ( Ιστορία χρήστη.) σε όρους ΚλέπτωΑυτό σας επιτρέπει να εξοικονομήσετε χρόνο στη σύνταξη τεχνικής εργασίας και τεκμηρίωσης στο τελικό προϊόν.

Τι πρέπει να είναι ένα πλαίσιο για την αρθρωτή δοκιμή JavaScript;

Το πλήρες εργαλείο δοκιμής JavaScript modular και ολοκλήρωση θα πρέπει να αποτελείται από τα ακόλουθα συστατικά:

  • Βιβλιοθήκη ισχυρισμού (σύνολο μεθόδων ελέγχου της κατάστασης του συστατικού στο τέλος κάθε δοκιμής).
  • Ψηρήστε τη βιβλιοθήκη (εργαλείο για τη δημιουργία κινδύνων αντικειμένων και άλλων "ζυμαρικών").
  • Δοκιμαστικός δρομέας (αυτόματο εργαλείο δοκιμής εκκίνησης με υποστήριξη πλειοψηφικής περιήγησης, συμπεριλαμβανομένων των προγραμμάτων IOS και του Android).
  • Σύνδεση σε δημοφιλή συστήματα συνεχούς ολοκλήρωσης (συνεχής ενσωμάτωση).

Στρατηγικές μεμονωμένων δοκιμών στο JavaScript

Σήμερα υπάρχουν τρεις Στρατηγικές Στρατηγικές Δοκιμών JavaScript (περισσότερα - στο τρίτο κεφάλαιο του βιβλίου που οδηγείται σε εξέλιξη JavaScript JavaScript Christian Johansen (Christian Johansen)):

  • Στο πρόγραμμα περιήγησης. δοκιμή;
  • Ακέφαλος δοκιμή;
  • Δοκιμάζοντας κατά μήκος του δρόμου Jstesterdriver.

Οι δοκιμές στο πρόγραμμα περιήγησης προϋποθέτουν την έναρξη όλων των δομικών δοκιμών και ολοκλήρωσης από τη σελίδα HTML που ανοίγει ο προγραμματιστής στα απαραίτητα προγράμματα περιήγησης. Μια τέτοια προσέγγιση είναι απλή και διαισθητικά κατανοητή. Ωστόσο, το μείον του είναι ότι δεν προβλέπει τη δυνατότητα να συμπεριληφθούν τέτοιες δοκιμές στη συνεχή ολοκλήρωση. Επιπλέον, εκτελέστε χειροκίνητα html σε δέκα ή περισσότερα προγράμματα περιήγησης και πατήστε συνεχώς το "F5" μπορεί να είναι κουραστικό στον προγραμματιστή.

Η ακίνητη δοκιμή είναι ότι ολόκληρος ο κωδικός JavaScript δοκιμάζεται σε έναν εξομοιωτή που μπορεί να γραφτεί στην Java, Ruby, JavaScript, C ++, κλπ. Ο πιο διάσημος εξομοιωτής είναι σήμερα phantomjs, που είναι ο κινητήρας Webkit., Ξεκίνησε από τη γραμμή εντολών. Από τα πλεονεκτήματα του εξομοιωτή, μπορεί να σημειωθεί ότι μπορεί εύκολα να χρησιμοποιηθεί σε συνεχή ολοκλήρωση, καθώς και αυτό που σας επιτρέπει να αυτοματοποιήσετε την έναρξη όλων των δοκιμών από τη γραμμή εντολών. Ωστόσο, αυτή η προσέγγιση έχει ένα σημαντικό μειονέκτημα - ο κώδικας δεν δοκιμάζεται σε πραγματικά προγράμματα περιήγησης, οπότε υπάρχει κίνδυνος σφαλμάτων που λείπουν το πρόγραμμα περιήγησης που δεν αναπαράγονται στον εξομοιωτή. Πριν από την εμφάνιση του JSTESTDRIVER, ήταν δυνατό να συναντήσουμε συχνά ότι η δοκιμή του προγράμματος περιήγησης συνδυάζεται με δοκιμή χωρίς κεφαλή, καθώς συμπληρώνουν τέλεια το ένα το άλλο.

Η δημιουργία αποτελεσματικών υποθέσεων δοκιμών μπορεί να είναι εξαιρετικά σημαντική για τα μεγάλα έργα, σε περίπτωση που η συμπεριφορά των εξαρτημάτων εφαρμογής μπορεί να ποικίλει για διάφορους λόγους. Ίσως το πιο συχνό πρόβλημα είναι όταν μια μεγάλη ομάδα προγραμματιστών εργάζεται στις ίδιες ή παρακείμενες ενότητες. Αυτό μπορεί να οδηγήσει σε μια μη προγραμματισμένη αλλαγή στη συμπεριφορά των λειτουργιών που γράφονται από άλλους προγραμματιστές. Ή η εργασία σε σύντομο χρονικό διάστημα οδηγεί σε μια απροσδόκητη αλλαγή στα κρίσιμα μέρη της εφαρμογής.

Η δοκιμή μιας εφαρμογής Web κατά κανόνα αποτελείται από την οπτική αξιολόγηση των στοιχείων της σελίδας και της εμπειρικής αξιολόγησης της λειτουργικότητας. Με άλλα λόγια, στη μετάβαση σε τμήματα και εκτελεί δράσεις στα δυναμικά στοιχεία.

Με την πάροδο του χρόνου, το έργο γεμίζει με νέα λειτουργικότητα, η οποία επιμηκύνει και περιπλέκει τη διαδικασία ελέγχου της εργασίας του. Η δοκιμή αρθρωτών (μονάδων) χρησιμοποιείται για την αυτοματοποίηση.

Υπάρχουν 2 προσεγγίσεις για την κατασκευή σεναρίων δοκιμών:

  • Ασπρο κουτί.Δοκιμές. - Οι δοκιμές γραφής βασίζονται στην εφαρμογή του λειτουργικού. Εκείνοι. Ελέγουμε τους ίδιους αλγορίθμους στους οποίους η λειτουργία των ενοτήτων του συστήματός μας. Αυτή η προσέγγιση δεν εγγυάται την ορθότητα του συστήματος στο σύνολό του.
  • Μαύρο κουτί.Δοκιμές. - Η δημιουργία scripts βασίζεται στις προδιαγραφές και τις απαιτήσεις του συστήματος. Έτσι, μπορείτε να ελέγξετε την απόδοση της απόδοσης ολόκληρης της εφαρμογής, ωστόσο, αυτή η προσέγγιση δεν σας επιτρέπει να πιάσετε μικρά και σπάνια σφάλματα.

Τι να δοκιμάσετε

Μπορεί να φαίνεται ότι αξίζει να εκθέσετε δοκιμές κάθε χαρακτηριστικό που έχετε εφαρμόσει. Αυτό δεν είναι έτσι. Οι δοκιμές γραφής παίρνουν τον χρόνο ανάπτυξης, επομένως, για τη βελτιστοποίηση της διαδικασίας εργασίας στη δημιουργία μιας εφαρμογής, αξίζει να προετοιμαστεί δοκιμές μόνο σύνθετων, κρίσιμων ή εκείνων των λειτουργιών που εξαρτώνται από τα αποτελέσματα άλλων μονάδων συστήματος. Καλύψτε τη διφορούμενη λογική σε δοκιμές στις οποίες μπορεί να συμβεί σφάλματα. Αξίζει επίσης να δημιουργηθεί δοκιμές για τα τμήματα αυτών των κώδικα, η οποία στο μέλλον σχεδιάζεται να βελτιστοποιηθεί έτσι ώστε μετά τη διαδικασία βελτιστοποίησης ήταν δυνατό να διασφαλιστεί ότι η εκτέλεση τους.

Σε γενικές γραμμές, είναι εξαιρετικά σημαντικό να αξιολογηθεί το κόστος δοκιμής κατά τη συμπίεση του χρόνου ανάπτυξης. Φυσικά, αν δεν περιορίζεστε στο χρόνο, μπορείτε να αντέξετε οικονομικά να καλύψετε κάθε λειτουργία σε δοκιμές. Αλλά κατά κανόνα, η ανάπτυξη διεξάγεται στο σκληρό τσιμέντο, οπότε το καθήκον ενός αναλυτικού ή ενός έμπειρου προγραμματιστή να καταλάβει πού είναι απαραίτητη η δοκιμή. Επιπλέον, οι δοκιμές γραφής αυξάνουν το κόστος του έργου.

Έτσι, μπορούν να διατυπωθούν 3 περιπτώσεις όταν δικαιολογείται η χρήση των αρθρωτών δοκιμών:

1) Εάν οι δοκιμές καθιστούν δυνατή την ταχεία αναγνώριση των σφαλμάτων παρά με τη συνήθη αναζήτηση.

2) Μειώστε το χρόνο εντοπισμού σφαλμάτων

3) Σας επιτρέπουν να ελέγχετε συχνά τον κώδικα.

Από τα 3 βασικά συστατικά του Frontland (HTML, CSS, JavaScript), πρέπει να δοκιμάσετε, ίσως μόνο javascript code. Το CSS ελέγχεται αποκλειστικά από την οπτική μέθοδο όταν ο προγραμματιστής / δοκιμαστής / πελάτης περιηγεί η γραφική διεπαφή σε διάφορα προγράμματα περιήγησης. Η σήμανση HTML ελέγχεται με την ίδια μέθοδο.

Πώς να δοκιμάσετε

Κατά την κατασκευή σεναρίων δοκιμών, είναι απαραίτητο να καθοδηγούνται από τις ακόλουθες αρχές:

  • Οι δοκιμές σας πρέπει να είναι όσο το δυνατόν πιο απλές. Στη συνέχεια, θα υπάρχουν πιο πιθανό ότι τα αποτελέσματα θα επηρεαστούν από το σφάλμα που προσπαθείτε να επαναλάβετε.
  • Αποσυντίθεται τις δοκιμές μεγάλων ενοτήτων. Το Grove βρίσκει ένα συγκεκριμένο μέρος σφάλματος.
  • Κάνουν τις δοκιμές ανεξάρτητες. Το αποτέλεσμα μιας δοκιμής σε καμία περίπτωση δεν πρέπει να εξαρτάται από τα αποτελέσματα του άλλου.
  • Τα αποτελέσματα των δοκιμών πρέπει να είναι εντελώς επαναλαμβανόμενα και αναμενόμενα.Κάθε φορά που ξεκινάτε ξανά τη δοκιμή, το αποτέλεσμα του θα πρέπει να είναι το ίδιο με την τελευταία φορά.
  • Για οποιοδήποτε σφάλμα κατά την εκτέλεση της εφαρμογής, πρέπει να δημιουργηθεί ένα σενάριο δοκιμών.Έτσι θα είστε σίγουροι ότι το σφάλμα είναι πραγματικά σταθερό και δεν εκδηλώνεται στους χρήστες.

Από τη δοκιμή

Για τις δοκιμές μονάδων, ο κώδικας JS υπάρχει αρκετές βιβλιοθήκες. Ίσως το πιο συνηθισμένο να είναι qunit. Για να πραγματοποιήσετε αρθρωτές δοκιμές χρησιμοποιώντας αυτή τη βιβλιοθήκη, θα χρειαστεί να δημιουργήσουμε ένα "sandbox" - μια απλή σελίδα HTML στον οποίο θα συνδεθεί η βιβλιοθήκη δοκιμών, ο κώδικας που θα υπόκειται σε δοκιμές και οι ίδιες οι δοκιμές.

Λειτουργίες για δοκιμές:

(Λειτουργία () (window.stepen \u003d λειτουργία (int) (var αριστερά \u003d 2; για (var i \u003d 1; i< int; i ++) { result = result * 2; } return result; } window.returnFunc = function() { return "ok"; } })();

Δοκιμές καταχώρισης:

Δοκιμή ("Stepen ()", Λειτουργία (Ίση (Stepen (2), 4, "2 ^ 2 - Ίση μέθοδος"). OK (Stepen (3) \u003d\u003d\u003d 8, μέθοδος "2 ^ 3 - OK" ) · Βαθύτερα (βήμα (5), 32, "2 ^ 5 - βαθύτερη μέθοδος") ·)); Asynctest ("ReturnFunc ()", λειτουργία () (ίση (επιστροφή (επιστροφή (), OK "," Async func test "). Έναρξη ()), 1000);));

Όπως μπορεί να δει, το Qunit υποστηρίζει 3 λειτουργίες για να συγκρίνετε τα αποτελέσματα της εκτέλεσης του κώδικα με την αναμενόμενη:

  • ΕΝΤΑΞΕΙ () - θεωρεί ότι η δοκιμή επιτυχής αν το επιστρεφόμενο αποτέλεσμα \u003d αληθές
  • Ίση () - συγκρίνει το αποτέλεσμα με την αναμενόμενη
  • Βαθειά () - συγκρίνει το αποτέλεσμα με το αναμενόμενο έλεγχο του τύπου πληροφορικής

Αποτέλεσμα εκτέλεσης:

Όπως μπορείτε να δείτε, η βιβλιοθήκη QUNIT πραγματοποιεί αμέσως τη δοκιμή κώδικα για πολλαπλά προγράμματα περιήγησης.

Υπάρχουν πολλές άλλες βιβλιοθήκες για αρθρωτές δοκιμές. Ωστόσο, η έννοια των κτιρίων σενάρια για τη δοκιμή σε αυτά είναι η ίδια, οπότε έχοντας κατανοηθεί από ένα πράγμα - δεν θα είστε δύσκολο να πάτε στο άλλο.

Σημαντικό να θυμάστε

Ένα χαρακτηριστικό του σύγχρονου κώδικα JS είναι το ασύγχρονο της εκτέλεσης. Οι βιβλιοθήκες δοκιμών είναι συνήθως σε θέση να πραγματοποιήσουν ασύγχρονες δοκιμές. Αλλά για παράδειγμα, αν προσπαθήσετε να δοκιμάσετε τη λειτουργία που, πείτε, στείλτε ένα αίτημα get-to bekend και επιστρέφει μια απάντηση από αυτήν, θα πρέπει να σταματήσετε τη λειτουργία STOP () για να τρέξετε, εκτελέστε τη λειτουργία δοκιμής και στη συνέχεια ξανά -Run για το Start () Stream., "Τυλίξτε το" στο Settimeout (). Εκείνοι. Πρέπει να κάνετε μια χρονική περίοδο, κατά τη διάρκεια της οποίας πρέπει να ολοκληρωθεί η λειτουργία. Είναι απαραίτητο να επιλέξετε προσεκτικά τη διάρκεια αυτού του τμήματος, .k. Από τη μία πλευρά, η μακρά εργασία της μεθόδου μπορεί να είναι τόσο χαρακτηριστικό είτε ακόμη και η ανάγκη για μια συγκεκριμένη εφαρμογή της λειτουργικότητας της εφαρμογής και την εσφαλμένη συμπεριφορά.

Δοκιμές Εφαρμογές Backbone

Για παράδειγμα εφαρμογές δοκιμών που γράφονται με τη χρήση backbone.js, χρησιμοποιούμε το έργο που περιγράφεται στο.

Οι αρθρωτές δοκιμές μπορούν να ελεγχθούν:

  • Η ορθότητα της δημιουργίας μοντέλων και ελεγκτών
  • Διορθώστε τα δεδομένα σε μοντέλα
  • Εκτέλεση μεθόδων ελεγκτή (γι 'αυτό πρέπει να επιστρέψουν το αποτέλεσμα)
  • Χώρος αναπαραστάσεων

Κωδικός δοκιμής:

Δοκιμή ("backbone.js", λειτουργία (OK (δείγμα, "έλεγχος ονομάτων"); OK (sample.Routes.app, "Έλεγχος δρομολογητή"); OK ("CHAT") "Δοκιμή ανοίγματος σελίδας") OK (δείγμα.Core.state, "Έλεγχος μοντέλου"); ίση ("show.core.state.get"), "sintel", "δεδομένα μοντέλου λαμβάνουν δοκιμή"); (Λειτουργία ($ .ajax (URL: "app / templates / about.tpl", datatype: "κείμενο")). Έγινε (Λειτουργία (δεδομένα) (δεδομένα), html (δεδομένα); )), "Έλεγχος φόρτωσης προτύπου"). Setimeout (λειτουργία () (έναρξη (έναρξη ()), 1000);));

Αποτέλεσμα της εργασίας με τα σφάλματα δοκιμής:

Αυτοματοποίηση δοκιμών εκτόξευσης

Κατά κανόνα, η εφαρμογή της εφαρμογής είναι ένα καθήκον που πρέπει να εκτελεστεί αρκετά συχνά με εντατική ανάπτυξη. Επομένως, αυτή η λειτουργία είναι συνήθως αυτοματοποιημένη. Χρησιμοποιούμε τον Jenkins στη δουλειά μας - ένα εργαλείο για συνεχή ολοκλήρωση. Η ιδέα είναι να συνδυάσετε την ανάπτυξη μέσω jenkins με αυτόματες δοκιμές.

Οι δοκιμές qunit τρέχουν στο πρόγραμμα περιήγησης. Θα σας βοηθήσουμε να ξεφύγουμε από αυτό το χαρακτηριστικό. Phantomjs - με την εξομοίωση του έργου του προγράμματος περιήγησης. Οι προγραμματιστές Phantomjs έχουν ήδη παράσχει ένα σενάριο για να εκτελέσει δοκιμές qunit, αλλά έπρεπε να το τροποποιήσει λίγο.

/ ** * Περιμένετε έως ότου η κατάσταση δοκιμής είναι αληθής ή εμφανίζεται ένα χρονικό όριο. * Χρήσιμο για αναμονή * Σε μια απόκριση διακομιστή ή για μια αλλαγή UI (Fadein, κλπ.). * * @Param testfx Κατάσταση JavaScript που αξιολογείται σε ένα Boolean, * μπορεί να περάσει ως συμβολοσειρά (π.χ.: "1 \u003d\u003d 1" ή * "$ (" # bar "). Ή * ως λειτουργία επανάκλησης. * @Param ενάγεται τι να κάνετε όταν πληρούται η κατάσταση του TestFX, * μπορεί να περάσει ως συμβολοσειρά (π.χ.: "1 \u003d\u003d 1" ή * "$ (" # bar "). (": Ορατό") "ή * ως λειτουργία επανάκλησης. * @Param timeoutmillis το μέγιστο χρονικό διάστημα για να περιμένετε. Εάν δεν έχει καθοριστεί *, χρησιμοποιούνται 3 δευτερόλεπτα. * / Λειτουργία Wait για (VAR MAXTIMTIOUTMillis) \u003d Timeoutmillis; Timeoutmillis: 3001, //< Default Max Timout is 3s start = new Date().getTime(), condition = false, interval = setInterval(function() { if ((new Date().getTime() - start < maxtimeOutMillis) && !condition) { // If not time-out yet and condition not yet fulfilled condition = (typeof(testFx) === "string" ? eval(testFx) : testFx()); //< defensive code } else { if(!condition) { // If condition still not fulfilled // (timeout but condition is "false") console.log(""waitFor()" timeout"); phantom.exit(1); } else { // Condition fulfilled (timeout and/or condition is //"true") console.log(""waitFor()" finished in " + (new Date().getTime() - start) + "ms."); typeof(onReady) === "string" ? eval(onReady) : onReady(); //< Do what it"s supposed to do once the // condition is fulfilled clearInterval(interval); //< Stop this interval } } }, 100); // repeat check every 250ms }; }; if (phantom.args.length === 0 || phantom.args.length > 2) Console.log ("Χρήση: URL QUNIT.JS"); phantom.exit (); ) VAR Page \u003d Νέα ιστοσελίδα (); // Διαδρομή "Console.log ()" Κλήσεις εντός του πλαισίου παραγράφων (δηλ. Τρέχουσα "αυτή") σελίδα.OnconsoleMesSage \u003d λειτουργία (msg) (console.log (msg);); Σελίδα.Open (κατάσταση) (κατάσταση) (κατάσταση! \u003d\u003d "επιτυχία") (console.log). Phantom.exit ();) αλλού (waitfor (λειτουργία επιστροφής () \u003d Document.EgetELEMEMEDByid ("qunit-testresult"); αν (el && el.innertext.match ("ολοκληρωθεί")) (Επιστροφή True;) Επιστρέψτε το FALSE;));));)).). (Λειτουργία () (var el \u003d document.getelementid ("qunit-testresult")? Console.log (el.innertext); δοκιμάστε). Innerhtml.length;) catch (e) (e)))) · Phantom.exit ((παραλύτης (failednum, 10)\u003e 0)? 1: 0);));)));

Για να εμφανίσετε μηνύματα σχετικά με τα αποτελέσματα στο σενάριο δοκιμής, πρέπει να προσθέσετε μια λειτουργία σύνδεσης.

Κώδικας δοκιμής - Ανθαίρετος κύκλος ανάπτυξης λογισμικού. Οι αρχάριοι ομάδες προγραμματιστών συχνά υποτιμούν το ρόλο του και ελέγχουν την απόδοση της εφαρμογής με τον παλιό τρόπο - "έργα και εντάξει". Αργά ή γρήγορα, αυτή η στρατηγική δίνει μια αποτυχία και ένας ιχνηλάτης σφαλμάτων αρχίζει να επικαλύπτει τον αμέτρητο στρατό των καθηκόντων. Έτσι, ώστε να μην παρακαλούμε σε ένα παρόμοιο δυτικό, συνιστώ μια μια φορά και για όλους να ασχοληθεί με τις αποχρώσεις των δοκιμών JavaScript. Κώδικας.

Το JavaScript δεν είναι το ίδιο

Σήμερα JavaScript. - Αυτό δεν είναι μόνο μια γλώσσα για την αναζωογόνηση της εμφάνισης της εφαρμογής. Φορές που χρησιμοποιήθηκε το Javascript για αστεία ή μενού παρασκευής μόνιμα. Τώρα είναι μια ανεξάρτητη γλώσσα που λειτουργεί εξίσου καλά τόσο στον πελάτη όσο και στον διακομιστή. Ο ρόλος της JavaScript αυξήθηκε σημαντικά και κατά συνέπεια, κατά την εγγραφή κώδικα, δεν πρέπει να είστε ντροπαλός να χρησιμοποιήσετε καλά αποδεδειγμένα σε άλλες γλώσσες προγραμματισμού.

Τι εννοώ με τους επαγγελματίες και τα παραδείγματα; Φυσικά, ένα αρχιτεκτονικό πρότυπο MVC (ελεγκτής προβολής μοντέλου) και τα πρότυπα οργανισμού κώδικα. Μετά από αυτό δεν είναι μια πονηρή σοφία, θα είστε σε θέση να γράψετε έναν καλύτερο κώδικα που δεν θα συνοδεύεται μόνο εύκολα, αλλά να έχετε τη δυνατότητα να δοκιμάσετε αυτόματα.

Το μεγαλύτερο σφάλμα δοκιμαστών

Δεν είναι μυστικό ότι ο πιο δημοφιλής τρόπος δοκιμής υπήρξε πάντα ένα banal check on the "eye". Η ουσία της είναι απλή στην ντροπή - έγραψε μερικές χιλιάδες γραμμές κώδικα, λύσει το έργο και ξεκινήσει τη δημιουργία του. Έπαιξε, επιταχύνθηκε - όλα φαίνονται να δουλεύουν, μπορείτε να ρίξετε ένα διακομιστή μάχης. Όλα είναι εξαιρετικά απλή και με τη δέουσα προσοχή του προγραμματιστή (ιδανικά ένα ξεχωριστό άτομο στο παρακινούμενο "Tester"), μπορείτε να βασιστείτε στην ορθότητα της εφαρμογής.

Στην πράξη, όλα είναι κάπως διαφορετικά. Ένας ξεχωριστός δοκιμαστής συνήθως δεν είναι. Ο ίδιος ο κύριος του έργου προσπαθεί να ελέγξει την απόδοση του προγράμματος, που εκτελεί μια ακολουθία ενεργειών που ορίζονται στο τεχνικό έργο. Περισσότεροι προχωρημένοι κώδικες κώδικα, αυτοματοποιήστε μια τέτοια δοκιμή ολοκλήρωσης με τη βοήθεια πράγματα όπως το σελήνιο.

Έτσι, ο προγραμματιστής έχει την ευκαιρία να ανιχνεύσει μόνο τα μεγαλύτερα λάθη. Δυστυχώς, "ηλίθιοι" και "απρόσωπα" δράσεις χρηστών, καθώς και οι πονηρές κινήσεις στη λογική των επιχειρήσεων, το 99% των περιπτώσεων παραμένουν πίσω από τις σκηνές.

Η παρουσία ενός ξεχωριστού ατόμου στην όψη του ελεγκτή επιλύει το πρόβλημα επίσης εν μέρει μέχρι ένα συγκεκριμένο χρόνο. Ακόμη και αν απορρίψετε τη φροντίδα του σπέρματος στη λεπτομέρεια, τότε η ποιότητα των δοκιμών του θα προσπαθήσει για μηδέν με αύξηση της εφαρμογής. Θα δώσω ένα παράδειγμα από την πρακτική.

Μόλις εντοπίστηκα να αναπτύξω ένα μικρό πρόγραμμα. Σύμφωνα με τη λειτουργικότητα, το έργο μοιάζει με το απλούστερο CRM, το οποίο εφαρμόσαμε στο συντομότερο δυνατόν. Μετά τη λήψη της ακριβούς αμοιβής, μεταβίβασα όλες τις πηγές στον πελάτη και ξέχασα το έργο για οκτώ μήνες. Επόμενο ξεκίνησε το πιο ενδιαφέρον. Ο πελάτης αποφάσισε να επεκτείνει σοβαρά τη λειτουργικότητα του προγράμματος και μου τηλεφώνησε να βοηθήσω. Φυσικά πήρα και ξεκινώντας μια νέα λειτουργία χαρακτηριστικών. Αρχικά δεν ήταν δύσκολο, αλλά όταν έφτασε στη συνολική ενσωμάτωση της λειτουργικότητας, το σκούπισμα σμήνος έσπευσαν στην κατεύθυνση μου. Οι φέτες κώδικα άρχισαν να συγκρούονται και έπρεπε να περάσουν πολύ χρόνο για να καταστρέψουν τις συγκρούσεις. "Λοιπόν, πώς δεν το βλέπετε αυτό με την αίτησή σας;" - Ρωτήστε προσεκτικούς αναγνώστες. Απαγορεύεται, αλλά λόγω του γεγονότος ότι η εφαρμογή που μου έτρεξε με σιωπηρή έλλειψη χρόνου και τα νεύρα δοκιμάζουν ολόκληρο το λειτουργικό με ένα πεδίο εφαρμογής. Ήμουν περιορισμένος στη δοκιμή μόνο μεμονωμένων λειτουργιών και πληρώθηκαν γενναιόδωρα για αυτό. Moral Basni - "Σκεφτείτε τη δοκιμή ως αναπόσπαστο μέρος της ανάπτυξης".

Δοκιμές μονάδας σαν ασημένια σφαίρα

Εξαλείψτε τα νεύρα σας και αυξήστε τις εγγυήσεις του έργου μεμονωμένων τμημάτων της εφαρμογής Βοηθά καλύτερα τις αρθρωτές δοκιμές. Εάν ποτέ δεν έχετε συναντήσει αυτή την τρομερή λέξη, θα εξηγήσω εν συντομία. Οι αρθρωτές δοκιμές σάς επιτρέπουν να αυτοματοποιήσετε τη διαδικασία δοκιμής και να εκθέσετε τις δοκιμές κάθε λειτουργία εφαρμογής.

Μετά την ολοκλήρωση της ανάπτυξης μιας νέας λειτουργίας (μια επιλογή για τη σύνταξη δοκιμών και πριν από την ανάπτυξη), ο προγραμματιστής γράφει έναν ειδικό κώδικα για να δοκιμάσει τον κώδικα του. Στον κώδικα δοκιμής, πρέπει να προσομοιώσετε διαφορετικές καταστάσεις και τις τιμές επιστροφής. Για παράδειγμα, γράψαμε μια λειτουργία για τους χώρους κοπής (TRIM). Για να δοκιμάσετε την απόδοσή της, πρέπει να προετοιμάσουμε μερικές δοκιμές που θα υποστηρίξουν ότι:

  • Όταν περνάτε τη γραμμή "σειρά" στην έξοδο, παίρνουμε μια "συμβολοσειρά".
  • Όταν μεταφέρετε τη χρονισμό "σειρά 9" στην έξοδο, λαμβάνουμε "σειρά 9".
  • Μπορούμε επίσης να προσθέσουμε δοκιμές σε άλλες παραμέτρους εισόδου (για παράδειγμα, αντικαταστήστε την καρτέλα της καρτέλας. Σε γενικές γραμμές, όσο καλύτερο καλύπτουμε τις δοκιμές κώδικα και θα παρέχουμε πιθανές αρνητικές επιλογές, τόσο μεγαλύτερη είναι η πιθανότητα ότι στην πιο υπεύθυνη στιγμή στο κεφάλι θα παραμείνει λίγα μαλλιά.

    Στον κόσμο της JS, οι δοκιμές περιγράφονται συνήθως χρησιμοποιώντας εξειδικευμένα πλαίσια. Έχουν όλα όσα χρειάζεστε για να περιγράψετε τις δοκιμές, καθώς και τα λεπτά κακά εργαλεία για τη συστηματοποίηση των αναφορών δοκιμών.

    Δοκιμές! \u003d Υπερβολικός κώδικας

    Οι προγραμματιστές που δεν χρησιμοποιούν τη δοκιμή μονάδας Αγάπη για να υποστηρίξουν ότι οι αρθρωτές δοκιμές απαιτούν γραφή και υποστήριξη για έναν πρόσθετο κώδικα. Όπως και οι προθεσμίες σε πραγματικά έργα είναι πιο συχνά συμπιεσμένοι και γράφοντας ένας πρόσθετος κώδικας είναι απλά καμία πιθανότητα.

    Σε βάρος των πεπιεσμένων προθεσμιών, συμφωνώ, αλλά στον υπερβολικό κώδικα είναι έτοιμο να υποστηρίξει. Από τη μία πλευρά, ναι, οι δοκιμές απαιτούν έναν πρόσθετο κώδικα και επομένως το χρόνο για να το γράψει. Από την άλλη πλευρά, ο κώδικας αυτός εκτελεί το ρόλο των αερόσακων στο αυτοκίνητο και πρέπει να εξοφλήσει με αύξηση της εφαρμογής.

    Όταν δεν υπάρχει χρόνος και βασανισμένοι στην επιθυμία να εγκαταλείψουν τις δοκιμές γραφής - σκεφτείτε τρεις φορές. Ίσως στην περίπτωση αυτή είναι σκόπιμο να καλυφθεί με τις δοκιμές μόνο τα πιο πονηρά τμήματα του κώδικα και να μην εγκαταλείπετε εντελώς τις δοκιμές. Πάντα σκεφτείτε με ένα μάτι στο μέλλον, σαν σε ένα μήνα το πρόγραμμά σας να φέρεται σε πρωτοφανή μεγέθη.

    Δεν ελέγχεται ο κωδικός

    Γιατί υποστηρίζω ότι πρέπει να σκεφτείτε τη δοκιμή πριν γράψετε τον κύριο κώδικα; Ναι, επειδή ο κώδικας που αρχικά αναμένεται να καλύψει τις δοκιμές μονάδων, γράφεται με ελαφρώς διαφορετικό ύφος. Δεν μπορεί να δοκιμαστεί όλοι οι κώδικες. Ο κώδικας στον οποίο η λογική και η εκπροσώπηση αναμειγνύονται και ακόμη και οι προκύπτες όπου είναι αδύνατο να δοκιμαστεί κανονικά. Εδώ πάντα συμβουλεύω να τηρήσετε πολλούς απλούς κανόνες:

  • Δεν χρειάζεται να γράψετε μεγάλες λειτουργίες. Κάθε λειτουργία πρέπει να λύσει ένα πρόβλημα και όχι 100.500 πιθανές καταστάσεις. Για παράδειγμα, δεν χρειάζεται να κρεμάσετε τα δεδομένα για να στείλετε δεδομένα στον διακομιστή στη λειτουργία που είναι υπεύθυνη για την παρασκευή τους.
  • Μια λειτουργία που αποτελείται από περισσότερες από 10 γραμμές του κώδικα είναι πιθανότατα μια κακή λειτουργία.
  • Η λογική και η εκπροσώπηση σε καμία περίπτωση δεν πρέπει να είναι μαζί.
  • Qunit - κλασικό είδος από τους δημιουργούς του jquery

    Qunit. Ιδιαίτερα δημοφιλή μεταξύ των προγραμματιστών JavaScript. Πρώτον, είναι καλά τεκμηριωμένο και εύκολο στη χρήση και, δεύτερον, δημιουργήθηκε από τους συγγραφείς JQuery. Η βιβλιοθήκη είναι κατάλληλη τόσο για τον κώδικα που δημιουργείται στη βάση δεδομένων JQuery όσο και στη μητρική JavaScript.

    Κατεβάστε την τελευταία έκδοση του QUNIT που μπορείτε από την επίσημη ιστοσελίδα - http://quunjs.com/. Η βιβλιοθήκη έρχεται με τη μορφή ενός αρχείου JS και CSS. Ας υποθέσουμε ότι με τη λήψη του απαραίτητου συστατικού που καταλάβατε, και αν ναι, τότε ο χρόνος για να γράψετε μια δοκιμή δοκιμής. Δεν θα πάμε μακριά και θα προσπαθήσουμε να δοκιμάσουμε την παραπάνω λειτουργία TRIM ().

    Για να αποδείξω τις δοκιμές, δημιούργησα το απλούστερο έργο με την ακόλουθη δομή:

    Το Index.html είναι το κύριο αρχείο που θα εμφανίζει τα αποτελέσματα των δοκιμών. - qunit-1.12.0.js - αρχείο qunit βιβλιοθήκη; - ΠΑΡΑΔΕΙΓΜΑ.js - ένα αρχείο που περιέχει έναν κώδικα δοκιμής (στην περίπτωση μας μια περιγραφή της λειτουργίας Trim ()). - test.js - αρχείο με δοκιμές. - QUNIT-1.12.0.CSS - Στυλ για εγγραφή της έκθεσης με δοκιμές.

    Τα περιεχόμενα του αρχείου index.html και test.js αντιπροσωπεύονται στην καταχώριση 1 και 2. το μεγαλύτερο μέρος του συνόλου που μας ενδιαφέρει η δεύτερη λίστα, η οποία παρέχει μια διαφήμιση για μια δοκιμαστική λειτουργία (Trim (Trim ()) και τον κώδικα δοκιμής για να δοκιμάσετε το εκτέλεση. Δώστε προσοχή, η ίδια η λειτουργία Trim () μπορεί να τοποθετηθεί οπουδήποτε, το συντρίψαμε στη δεύτερη λίστα μόνο για εξοικονόμηση χώρου στο περιοδικό.

    Τώρα κοιτάξτε τις δοκιμές μόνοι σας. Να διεξάγονται επιθεωρήσεις της υγείας του κώδικα βιβλιοθήκης μας Qunit.js. μας προσφέρει μια σειρά μεθόδων:

  • Δοκιμή () - περιτύλιγμα για να περιγράψει τη δοκιμή.
  • ΕΝΤΑΞΕΙ () - Η έγκριση σας επιτρέπει να ελέγχετε την αλήθεια της πρώτης παραμέτρου. Στο παράδειγμά μας, της δίνω μια πρόκληση της λειτουργίας του Trim () και σε σύγκριση με την αξία που περιμένω να πάρω. Εάν η κατάσταση είναι αληθής - η δοκιμή πέρασε.
  • Ίση () - Η μέθοδος σάς επιτρέπει να ελέγχετε την ισότητα της πρώτης και δεύτερης παραμέτρου. Προσέξτε αμέσως ότι αυτή η μέθοδος εκτελεί μη αυστηρή δοκιμή, επομένως είναι κατάλληλη για τις κλιμακωμένες τιμές.
  • Πιθανές () - το αντίθετο της ίσης (). Εκτελείται εάν η πρώτη τιμή δεν είναι ίση με τη δεύτερη.
  • strictequal () -Αγικό () με μία διαφορά - χρησιμοποιεί έναν αυστηρό έλεγχο (δηλ. Ελέγχει επίσης τον τύπο δεδομένων).
  • notstrictequal () - η μέθοδος είναι το αντίθετο του strictequal ();
  • Βαθειά () - Η μέθοδος για αναδρομικές δηλώσεις εφαρμόζεται στα πρωτεύοντα, τις συστοιχίες, τα αντικείμενα.
  • notdreepal () - η μέθοδος είναι αντίθετη από τα βαθύτερα ().
  • Εγείρει () - έγκριση για τη δοκιμή των λειτουργιών επανάκλησης που δημιουργούν εξαίρεση.
  • Στη δεύτερη λίστα, έδειξε οπτικά τον τρόπο εφαρμογής αυτών των μεθόδων στην πράξη. Εάν εκτελέσετε ένα παράδειγμα δοκιμής σε αυτή τη φόρμα, τότε όλες οι δοκιμές θα ολοκληρωθούν με επιτυχία (δείτε την αντίστοιχη εικόνα). Για να δείτε τη διαφορά μεταξύ των επιτυχημένων δοκιμών και της ολοκλήρωσης με τα λάθη, άλλαξα ελαφρά τον κώδικα μιας δοκιμής. Σε μια συμβολοσειρά με μια ζύμη με strictequal () Προστέθηκα σκόπιμα ένα εσφαλμένο αποτέλεσμα (δείτε την αντίστοιχη εικόνα).

    Καταχώρηση 1. Περιεχόμενο του αρχείου ευρετηρίου.HTML

    Δοκιμές qunit


    Λίστα 2. Ελέγξτε τα αρχεία και τη λειτουργία Trim ()

    Λειτουργία Trim (String) (Επιστροφή (String || ""). (/ ^ + + + $ + | ").) Δοκιμή (" TRIM () λειτουργία λειτουργίας ", λειτουργία (OK (Trim ("Test") \u003d\u003d "Δοκιμή", "Κόψτε ακραίες κενές"). OK (Trim ("1") \u003d\u003d "1", "Πολλοί χώροι στις πλευρές"); OK (Trim (" 24 ") \u003d \u003d" 24 "," κενά και καρτέλες στις πλευρές "); ίση (TRIM ("), "", "κενή συμβολοσειρά"); Strictequal (TRIM ("]))).

    Με τη δοκιμή απλών λειτουργιών, φαίνεται να έχει καταλάβει. Σε κάθε περίπτωση, δεν έχω τίποτα περισσότερο να προσθέσω. Στη συνέχεια, πρέπει να κάνετε έναν πραγματικό κώδικα και να δοκιμάσετε τον εαυτό σας να γράψετε τις δοκιμές. Ας δούμε την άλλη, συχνά προκύπτουν από την εργασία πριν JavaScript.- προγραμματιστές - δοκιμές ασύγχρονης λειτουργίας. Η εφαρμογή, γεμισμένη από τον κωδικό JavaScript, είναι 99% αλληλεπιδρά με το τμήμα διακομιστή με Ajax. Είναι επίσης αδύνατο να αφήσετε αυτόν τον κώδικα χωρίς έλεγχο, αλλά οι δοκιμές γραφής θα φαίνονται λίγο διαφορετικές. Εξετάστε ένα παράδειγμα:

    Asynctest ("myasyncfunc ()", λειτουργία () (settimeout (λειτουργία () \u003d\u003d true, "τα δεδομένα μεταφέρονται με επιτυχία"). Έναρξη ()), 500);)).

    Η κύρια διαφορά αυτού του παραδείγματος από το προηγούμενο - αντί της δοκιμής () περιτυλίγματος () εφαρμόζει το Asynctest (), δηλώνει άμεσα ότι ενδιαφέρεται να δοκιμάσει με ακρίβεια ασύγχρονη δοκιμή. Στη συνέχεια ξεκινώ τον χρόνο που περιμένει σε 500 ml. δευτερόλεπτα. Κατά τη διάρκεια αυτής της περιόδου, η λειτουργία Myasyncfunc () πρέπει να μεταφέρει δεδομένα στον διακομιστή δοκιμής και αν το Nishtyak επιστρέψει αληθές. Εδώ έρχεται η πιο ενδιαφέρουσα στιγμή. Όταν ο asynctest () καλείται, το νήμα εκτέλεσης σταματά και πρέπει να το ξεκινήσετε στο τέλος της δοκιμής. Για τον έλεγχο της ροής εκτέλεσης στο Qunit. Υπάρχουν μέθοδοι εκκίνησης () και STOP ().

    Δοκιμές ασύγχρονης λειτουργιών χρησιμοποιώντας τη βιβλιοθήκη Qunit. Είναι αρκετά εύκολο. Το τελευταίο παράδειγμα που θα ήθελα να αποσυναρμολογήσω συνδέεται με τη σύνταξη μιας δοκιμής που εκτελεί αρκετούς ασύγχρονους ελέγχους. Το κύριο ερώτημα που συμβαίνει σε αυτό σε τέτοια καθήκοντα είναι το βέλτιστο μέρος για να ξεκινήσετε τη ροή εκτέλεσης. Η επίσημη αποβάθρα προτείνει να εφαρμόσει κάτι σαν:

    Asynctest ("Myasyncfunc (), Λειτουργία () () () (3), // Εδώ κάνουμε τρεις ελέγχους ΟΚ (Myasyncfunc ()," Κάνε τον κόσμο είναι καλύτερο από το 1 "); Εντάξει (Myasyncfunc ()," Κάντε το ο κόσμος καλύτερα από 2 "); ok (myasyncfunc ()," κάνει τον κόσμο είναι καλύτερο από 3 "); setimeout (λειτουργία () (έναρξη ()), 3000);));

    Δοκιμή για δράσεις χρήστη

    Θα πρέπει πάντα να θυμόμαστε ότι πολλά κομμάτια διεπαφής γράφονται στο JavaScript. Για παράδειγμα, ο χρήστης κάνει κλικ στο Pimpe και σε απάντηση στο κλικ του πρέπει να συμβεί κάτι. Ένας τέτοιος κωδικός "διεπαφής" σε έργα έχει ένα τεράστιο ποσό και είναι επίσης απαραίτητο να καλύψουμε τις δοκιμές. Ας δούμε πώς μπορείτε να προσομοιώσετε ένα προσαρμοσμένο πληκτρολόγιο και να γράψετε μια ξεχωριστή δοκιμή για αυτή τη δράση. Φανταστείτε ότι έχουμε ένα συγκεκριμένο χαρακτηριστικό που καταγράφει τα κλειδιά. Ο κώδικας της έφερε στην τρίτη λίστα:

    Καταχώρηση 3. Καταγραφή πλήκτρων

    Λειτουργία Keylogger (Target) (εάν (! (Αυτό το παράδειγμα Keylogger)) (επιστρέψτε νέο keylogger (στόχος);) αυτό.Target \u003d στόχος; this.log \u003d; var self \u003d αυτό? Αυτό.target.off ("keydown") .ΩΝ ("Κλείδωμα", λειτουργία (συμβάν) (self.log.push (event.Keycode)));).

    Τώρα ας προσπαθήσουμε να δοκιμάσουμε αυτή τη λειτουργία. Πρώτα απ 'όλα, στο σώμα της δοκιμής, πρέπει να μιμηθούμε το πλήκτρο που πιέζεται. Ο ευκολότερος τρόπος να το κάνετε αυτό με τη βιβλιοθήκη jquery.που σας επιτρέπει να δημιουργήσετε ένα συμβάν σε ένα ζευγάρι γραμμών κώδικα (βλ. Καταχώρηση 4).

    Καταχώρηση 4. Κώδικας δοκιμής για keylogger

    Δοκιμή ("Δοκιμή κλειδιού δοκιμής", λειτουργία () () (), $ doc \u003d $ (έγγραφο), κλειδιά \u003d keylogger ($ doc); event \u003d $. Συμβάν ("keydown"); event.keycode \u003d 9; $ doc .trggg (συμβάν) · ίση (keys.log.length, 1, "κλειδί είναι γραμμένο") · ίση (Keys.log [0], 9, "Πατώντας ένα πλήκτρο με κωδικό 9");)).

    Στην αρχή της λίστα με τη δοκιμή, προετοιμάζουν ένα γεγονός για την εξομοίωση της πληκτρολόγησης - "keydown". Θα σας ενδιαφέρουν να πιέσουμε το πλήκτρο TAB (κωδικός 9). Στη συνέχεια, χρησιμοποιώντας τη μέθοδο Trigger (), στέλνω ένα μαγειρεμένο συμβάν, μετά το οποίο μπορείτε να αρχίσετε να δοκιμάζετε. Πρώτον, ελέγξτε την κοινή εικόνα - αν το πλήκτρο πιέστηκε και στη συνέχεια ο κώδικας του.

    Dom υπό την κάλυψη των δοκιμών

    χρόνος Qunit.js. Σας επιτρέπει να δοκιμάσετε τις ενέργειες των χρηστών, στη συνέχεια, με τις δοκιμές γραφής για το DOM επίσης να μην είναι προβλήματα. Αυτό ισχύει και το παρακάτω παράδειγμα θα επιβεβαιώσει τα λόγια μου παρακάτω. Δεν θα το σχολιάσω, απλά κοιτάξτε τον κώδικα και όλα θα καταστούν σαφή:

    Δοκιμή ("Προσθέστε ένα νέο στοιχείο DIV", λειτουργία () (var $ fixtt \u003d $ ("# qunit-fixture"); $ fixture.Append ("

    Αυτό είναι ένα νέο div
    ") · Ίση ($ (" div ", $ fixture). Μήκος, 1," Νέο DIV με επιτυχία! ");));

    Phantom.js - Εκτελέστε τις δοκιμές από την κονσόλα

    Γράψτε τις δοκιμές χρησιμοποιώντας τη βιβλιοθήκη Qunit.js. Βολικό και απλό, αλλά αργά ή γρήγορα θα σας επισκεφθεί για να αυτοματοποιήσει με κάποιο τρόπο την έναρξη των αποτελεσμάτων δοκιμής και συλλογής. Για παράδειγμα, έχω μια ξεχωριστή εικονική μηχανή στο DigitalCean για αυτή την επιχείρηση, η οποία μπορεί να διαχειρίζεται μόνο με την κονσόλα.

    Αρκεί να λύσει το έργο Phantom.js. Αυτό δεν είναι ένα άλλο πλαίσιο για τη σύνταξη. Δοκιμές μονάδων, και μια πλήρης έκδοση κονσόλας της μηχανής Webkit.. Εάν λέτε ευκολότερη, τότε αυτή η εφαρμογή εξουδετερώνει το πρόγραμμα περιήγησης. Χρησιμοποιώντας το Phantom.js, δεν είναι δυνατόν να μην είναι εύκολο να αυτοματοποιήσετε τις δοκιμαστικές δοκιμές, αλλά και να λύσετε πολλές εργασίες, νωρίς ή αργότερα, προκύπτουν από τον προγραμματιστή: τη λήψη αποτελεσμάτων των σελίδων πουτάρχονταν στο αρχείο (PNG, JPG), τη λειτουργία του δικτύου Παρακολούθηση (ταχύτητα φόρτωσης, συνολική απόδοση κ.λπ. δ.), εξομοίωση των ενεργειών χρήστη κ.λπ. Σας συνιστούμε να μην είστε τεμπέλης και να διαβάσετε την επίσημη τεκμηρίωση για αυτό το έργο, σίγουρα θα βρείτε κάτι ενδιαφέρον για τον εαυτό σας.

    Phantom.js. Μπορείτε να συλλέξετε κάτω από διαφορετικές πλατφόρμες (Nix, Mac OS X, Windows). Εάν είστε όλοι σχεδιασμένοι για παράθυρα, τότε δεν υπάρχουν προβλήματα - ανακουφίστε τα δυαδικά αρχεία και προς τα εμπρός. Μπορούν να προκύψουν μικρά προβλήματα με την έναρξη εάν διαθέτετε δύο βίντεο προσαρμογέα, ένα από τα οποία είναι nvidia. Σε αυτή την περίπτωση, θα πρέπει να χρησιμοποιήσετε το hack που περιγράφεται στην εισαγωγή.

    Ας προσπαθήσουμε να εξοικειωθούμε με phantom.js στην πράξη. Να παραλείψετε phantom.js. Δοκιμές που προετοιμάζονται στο παρελθόν τμήμα και πάρτε τα αποτελέσματα της εκτέλεσης στην κονσόλα, θα χρειαστούμε ένα ειδικό σενάριο λογοκριστή - run-qunit.js. Ανοίξτε την κονσόλα (εργάζομαι στα Windows, οπότε χρησιμοποιώ το CMD) και κάντε κλικ στην εντολή της μορφής:

    Phantom.exe.<путь к run-qunit.js> <путь к странице с тестами>

    Στην περίπτωσή μου, η εντολή εκκίνησης αποδείχθηκε:

    Ε: \\ soft \\ phantomjs\u003e phantomjs.exe e: \\ temp \\ testjsforx qunit \\ run-qunit.js αρχείο: /// e: / exemp/testjsforx/qunit/index 2592 χιλιοστά του δευτερολέπτου. 9 Οι ισχυρισμοί των 9 πέρασαν, 0 απέτυχε.

    Όλες οι δοκιμές πέρασαν.

    Δοκιμές κώδικα καλύμματος που απαιτούνται μοναδικά και ανεξάρτητα από το πόσο μεγεθυντική εφαρμογή δημιουργείτε. Για άλλη μια φορά σας υπενθυμίζω ακόμη και τα μικρότερα προγράμματα μετατρέπονται σε στιβαρά τέρατα, τα οποία πρέπει να διατηρηθούν και τη λειτουργικότητα του ντόπινγκ. Καλά καλυμμένα με δοκιμές κώδικα - ένα κλειδί για την επιτυχία και την ποιότητα. Ναι, αυτό ακριβώς αρχίστε να γράφετε τον κωδικό κατάλληλο για αυτοματοποιημένες δοκιμές δεν είναι εύκολο, αλλά πιστέψτε με, όλα αυτά τα βασανιστήρια θα πληρώσουν στο μέλλον. Σε αυτό, έχω τα πάντα, καλή τύχη!

    Όταν δεν υπάρχει χρόνος για τις δοκιμές

    Ελλείψει του χρόνου, δεν έχει νόημα να γράψουν δοκιμές για απλές λειτουργίες (πάρτε το ίδιο διακοσμητικό () από παραδείγματα στο άρθρο), είναι καλύτερο να εστιάσετε στα πιο κρίσιμα τμήματα του κώδικα. Η λήψη του ίδιου κανόνα ακολουθείται όταν γράφετε συχνά μεταβαλλόμενο κώδικα. Το τεχνικό καθήκον του ζωντανού έργου συχνά αλλάζει και ορισμένες λειτουργίες πρέπει να ενημερώνονται συνεχώς. Τέτοιες αλλαγές ενδέχεται να συνεπάγονται δυσάρεστες στιγμές - με νέα δεδομένα, ο τροποποιημένος κώδικας λειτουργεί καλά και ο παλιός δεν χωνεύει οργανικά. Αυτό δεν πρέπει να πιάσει εδώ αποτυχία, αυτές οι λειτουργίες είναι καλύτερες να καλύψουν αμέσως τις δοκιμές. Θυμόσαστε έναν απλό κανόνα - δεν υπάρχει χρόνος για να καλύψετε όλες τις δοκιμές κώδικα, κόβοντας το πιο σημαντικό μέρος.

    Κανόνες καλών δοκιμών

  • Η δοκιμή πρέπει να είναι όσο το δυνατόν πιο απλή. Την πιο δύσκολη δοκιμασία, τόσο πιο πιθανό να επιτρέψει σφάλματα σε αυτό ·
  • Οι δοκιμές πρέπει να ομαδοποιούνται σε μονάδες, ώστε να είναι ευκολότερο να βρεθούν σφάλματα και να μπορούν να δοκιμάσουν ορισμένα τμήματα της εφαρμογής.
  • Κάθε δοκιμή δεν πρέπει να εξαρτάται από άλλες δοκιμές.
  • Γράψτε πάντα μια ξεχωριστή δοκιμή, με κάθε ανίχνευση σφαλμάτων.
  • Phantom.js Προβλήματα στα Windows

    Τόσο συνέβη, αλλά όλα τα παραδείγματα αυτού του άρθρου δεν εξέτασαν στο Linux και κάτω από τα παλιά παράθυρα 7. αποδεικνύεται ότι το phantom.js έχει μικρά προβλήματα κατά την εργασία σε συστήματα που χρησιμοποιούν αρκετούς προσαρμογείς βίντεο. Στο φορητό υπολογιστή μου, εκτός από το ενσωματωμένο βίντεο, το τσιπ εξακολουθεί να κρέμεται από το NVIDIA και λόγω του phantom.js κατηγορηματικά αρνήθηκε να απαντήσει στην εντολή phantom.exit (). Ως αποτέλεσμα, μετά την εκτέλεση του σεναρίου, η διαδικασία Phantom.js δεν ολοκλήρωσε το έργο του και συνέχισε να κρεμάσει στη μνήμη. Το παράθυρο Terminal Spected επίσης σταμάτησε να ανταποκρίνεται στις εντολές ολοκλήρωσης (Ctrl + C - δεν βοήθησε).

    Εάν αντιμετωπίσατε ένα παρόμοιο πρόβλημα και σκοπεύετε να χρησιμοποιήσετε phantom.js. Στα παράθυρα, τότε ετοιμαστείτε να κάνετε το επόμενο hack. Ανοίξτε τον πίνακα ελέγχου NVIDIA. Βρείτε στις παράμετροι του δέντρου 3D. Η πλευρά πρέπει να εμφανίζεται η επιλογή "Προτιμώμενος γραφικός προσαρμογέας". Από προεπιλογή, η τιμή του έχει οριστεί σε Avtovyt. Πρέπει να το αλλάξουμε στον "επεξεργαστή υψηλής απόδοσης NVIDIA" ή "ενσωματωμένος γραφικός εξοπλισμός". Μετά από αυτό το απλό τέχνασμα phantom.js. Άρχισε να συμπεριφέρεται υπάκουος.

  • Το Cristian Johansen "εξέλιξη Javascript" είναι ένα από τα λίγα βιβλία που βλέπουν το JavaScript όσον αφορά τις δοκιμές γραφής.
  • John Reving, Bibo Bibo "μυστικά JavaScript Ninja" - ένα καλό βιβλίο που θα έρθει στο Handy πρώτα από όλους τους προγραμματιστές JS με ένα μεσαίο επίπεδο εκπαίδευσης. Το βιβλίο περιγράφει λεπτομερώς τα ζητήματα της σύνταξης ενός αποτελεσματικού κωδικού διασταυρούμενου προγράμματος περιήγησης, αποχετεύσεις επεξεργασίας συμβάντων και πολλά άλλα καλούδια.
  • Η δοκιμή αποτελεί αναπόσπαστο μέρος του κύκλου ανάπτυξης λογισμικού. Οι αρχαίες ομάδες των προγραμματιστών συχνά υποτιμούν το ρόλο του και ελέγχουν την απόδοση της εφαρμογής με τον παλιό τρόπο - "έργα και εντάξει". Αργά ή γρήγορα, αυτή η στρατηγική δίνει μια αποτυχία και ένας ιχνηλάτης σφαλμάτων αρχίζει να επικαλύπτει τον αμέτρητο στρατό των καθηκόντων. Για να μην παρακαλούμε σε ένα παρόμοιο δυτικό, προτείνω μια φορά και για όλους να ασχοληθεί με τις αποχρώσεις του κώδικα δοκιμής JavaScript.

    Το JavaScript δεν είναι πλέον ένα κέικ!

    Πιθανώς δεν χρειάζεται να εξηγήσετε ότι σήμερα η JavaScript δεν είναι μόνο μια γλώσσα για την αναβίωση της εμφάνισης της εφαρμογής. Αλλά θα εξακολουθώ να εξηγήσω και να κάνω μια μικρή εισαγωγή, γιατί τότε θα πληρώσω ακόμα περισσότερα χρήματα! 🙂 Έτσι, φορές κατά τη Javascript για αστεία ή κάνοντας μενού μενού, παραμένουν αμετάκλητα. Τώρα είναι μια ανεξάρτητη γλώσσα που λειτουργεί εξίσου καλά τόσο στον πελάτη όσο και στον διακομιστή. Ο ρόλος της JavaScript αυξήθηκε σημαντικά και κατά συνέπεια, κατά την εγγραφή κώδικα, δεν πρέπει να είστε ντροπαλός να χρησιμοποιήσετε καλά αποδεδειγμένα σε άλλες γλώσσες προγραμματισμού.

    Τι εννοώ με τους επαγγελματίες και τα παραδείγματα; Φυσικά, το αρχιτεκτονικό πρότυπο MVC (ελεγκτής προβολής μοντέλου) και τα πρότυπα οργανισμού κώδικα. Μετά από αυτή την απλή σοφία, θα είστε σε θέση να γράψετε έναν καλύτερο κώδικα που δεν θα συνοδεύεται μόνο εύκολα, αλλά και η δυνατότητα να δοκιμάσετε αυτόματα.

    Κανόνες καλών δοκιμών

    • Η δοκιμή πρέπει να είναι όσο το δυνατόν πιο απλή. Όσο πιο δύσκολη δοκιμή, τόσο πιο πιθανό να επιτρέψει σφάλματα σε αυτό.
    • Οι δοκιμές πρέπει να ομαδοποιούνται στις ενότητες, ώστε να είναι ευκολότερο να βρεθούν σφάλματα και να είναι σε θέση να δοκιμάσετε ορισμένα τμήματα της εφαρμογής.
    • Κάθε δοκιμή δεν πρέπει να εξαρτάται από άλλες δοκιμές.
    • Γράψτε πάντα μια ξεχωριστή δοκιμή με κάθε ανίχνευση σφαλμάτων.

    Το μεγαλύτερο σφάλμα δοκιμαστών

    Δεν είναι μυστικό σε κανέναν ότι ο πιο δημοφιλής τρόπος δοκιμής υπήρξε πάντα ένα banal test στο "Eye". Η ουσία της είναι απλή στην ντροπή - έγραψε μερικές χιλιάδες γραμμές κώδικα, λύσει το έργο και ξεκινήσει τη δημιουργία του. Έπαιξε, επιταχύνθηκε - όλα φαίνονται να δουλεύουν, μπορείτε να ρίξετε ένα διακομιστή μάχης. Όλα είναι εξαιρετικά απλά και με την κατάλληλη προσοχή του προγραμματιστή (ιδανικά ένα ξεχωριστό άτομο στο παρατσούκλι "Tester") μπορεί να ενοικιαστεί με την ορθότητα της εφαρμογής.

    Στην πράξη, όλα είναι κάπως διαφορετικά. Ένας ξεχωριστός δοκιμαστής συνήθως δεν είναι. Ο ίδιος ο κύριος του έργου προσπαθεί να ελέγξει την απόδοση του προγράμματος, που εκτελεί μια ακολουθία ενεργειών που ορίζονται στο τεχνικό έργο. Πιο προχωρημένοι κύβοι του κώδικα αυτοματοποιούν παρόμοιο έλεγχο ολοκλήρωσης χρησιμοποιώντας εργαλεία όπως το σεληνή.

    Έτσι, ο προγραμματιστής έχει την ευκαιρία να ανιχνεύσει μόνο τα μεγαλύτερα λάθη. Δυστυχώς, οι "ηλίθιοι" και οι "απρόβλεπτες" ενέργειες χρηστών, καθώς και οι δύσκολες κινήσεις στην επιχειρηματική λογική στο 99% των περιπτώσεων παραμένουν πίσω από τις σκηνές.

    Η παρουσία ενός ξεχωριστού δοκιμαστή επιλύει το πρόβλημα επίσης εν μέρει μέχρι ένα συγκεκριμένο χρόνο. Ακόμη και αν απορρίψετε τη φροντίδα του σπέρματος στη λεπτομέρεια, τότε η ποιότητα των δοκιμών του θα προσπαθήσει για μηδέν με αύξηση της εφαρμογής. Θα δώσω ένα παράδειγμα από την πρακτική.

    Μόλις εντοπίστηκα να αναπτύξω ένα μικρό πρόγραμμα. Σύμφωνα με τη λειτουργικότητα, το έργο μοιάζει με το απλούστερο CRM, το οποίο έχω εφαρμόσει στο συντομότερο δυνατό χρόνο. Μετά τη λήψη της ακριβούς αμοιβής, μεταβίβασα όλες τις πηγές στον πελάτη και ξέχασα το έργο για οκτώ μήνες. Επόμενο ξεκίνησε το πιο ενδιαφέρον. Ο πελάτης αποφάσισε να επεκτείνει σοβαρά τη λειτουργικότητα του προγράμματος και μου τηλεφώνησε να βοηθήσω. Φυσικά, ανέλαβα και άρχισα να πληκτρολογήσω τη λειτουργία για τη λειτουργία ... αρχικά ήταν εύκολο, αλλά όταν ήρθε στη συνολική ενσωμάτωση του λειτουργικού, το σμήνος βουτιά έσπευσαν στην κατεύθυνση μου. Οι φέτες κώδικα άρχισαν να συγκρούονται και έπρεπε να περάσουν πολύ χρόνο για να καταστρέψουν τις συγκρούσεις. "Λοιπόν, πώς δεν το βλέπετε αυτό με την αίτησή σας;" - Οι αναγνώστες ρωτούν. Θα απαντήσω: έτρεξα, αλλά λόγω του γεγονότος ότι η αίτηση βγήκε, δεν ήταν αρκετός χρόνος για να δοκιμάσετε το χρόνο και τα νεύρα για να δοκιμάσετε ολόκληρο το λειτουργικό με ένα πεδίο. Ήμουν περιορισμένος στη δοκιμή μόνο μεμονωμένων λειτουργιών και πληρώθηκαν γενναιόδωρα για αυτό. Moral Basnie: "Σκεφτείτε τη δοκιμή ως αναπόσπαστο μέρος της ανάπτυξης".

    Δοκιμές μονάδας σαν ασημένια σφαίρα

    Εξαλείψτε τα νεύρα σας και αυξήστε τις εγγυήσεις του έργου μεμονωμένων τμημάτων της εφαρμογής Βοηθά καλύτερα τις αρθρωτές δοκιμές. Εάν ποτέ δεν έχετε συναντήσει αυτό το τρομερό θηρίο, θα εξηγήσω εν συντομία. Οι αρθρωτές δοκιμές σάς επιτρέπουν να αυτοματοποιήσετε τη διαδικασία δοκιμής και να εκθέσετε τις δοκιμές κάθε λειτουργία εφαρμογής.

    Μετά την ολοκλήρωση της ανάπτυξης μιας νέας λειτουργίας (μια επιλογή για τη σύνταξη δοκιμών και πριν από την ανάπτυξη), ο προγραμματιστής γράφει έναν ειδικό κώδικα για να δοκιμάσει τον κώδικα του. Πρέπει να προσομοιώσει διαφορετικές καταστάσεις και τις τιμές επιστροφής. Για παράδειγμα, γράψαμε μια λειτουργία για τους χώρους κοπής (TRIM). Για να δοκιμάσετε την απόδοσή της, πρέπει να προετοιμάσουμε διάφορες δοκιμές που θα υποστηρίξουν ότι:

    • Όταν περνάτε τη γραμμή "σειρά" στην έξοδο, παίρνουμε μια "συμβολοσειρά".
    • Όταν μεταφέρετε τη χρονισμό "σειρά 9" στην έξοδο, λαμβάνουμε "σειρά 9".

    Μπορούμε επίσης να προσθέσουμε δοκιμές σε άλλες παραμέτρους εισόδου (για παράδειγμα, αντικαταστήστε την καρτέλα της καρτέλας. Σε γενικές γραμμές, όσο καλύτερα καλύπτουμε τις δοκιμές κώδικα και όσο περισσότερο θα αναζητήσουμε τις πιθανές αρνητικές επιλογές, τόσο υψηλότερες είναι οι πιθανότητες που λίγα μαλλιά παραμένει στην πιο υπεύθυνη στιγμή στο κεφάλι.

    Στον κόσμο των δοκιμών JS περιγράφονται συνήθως χρησιμοποιώντας εξειδικευμένα πλαίσια. Έχουν τα πάντα για αυτό το απαραίτητο, καθώς και τα εργαλεία για τη συστηματοποίηση των αναφορών δοκιμών.

    Δοκιμές! \u003d Υπερβολικός κώδικας

    Οι προγραμματιστές που δεν χρησιμοποιούν τη δοκιμή μονάδων Αγάπη για να υποστηρίξουν ότι οι αρθρωτές δοκιμές απαιτούν γραφή και υποστήριξη ενός πρόσθετου κώδικα. Όπως και οι προθεσμίες σε πραγματικά έργα είναι πιο συχνά συμπιεσμένοι και γράφοντας ένας πρόσθετος κώδικας είναι απλά καμία πιθανότητα.

    Όταν δεν υπάρχει χρόνος για τις δοκιμές

    Ελλείψει του χρόνου, δεν έχει νόημα να γράψουν δοκιμές για απλά χαρακτηριστικά (πάρτε το ίδιο διακοσμητικό () από το παράδειγμα στο άρθρο), είναι καλύτερο να εστιάσετε στα πιο κρίσιμα τμήματα του κώδικα. Η λήψη του ίδιου κανόνα ακολουθείται όταν γράφετε συχνά μεταβαλλόμενο κώδικα. Το τεχνικό καθήκον του ζωντανού έργου συχνά αλλάζει και ορισμένες λειτουργίες πρέπει να ενημερώνονται συνεχώς. Τέτοιες αλλαγές ενδέχεται να συνεπάγονται δυσάρεστες στιγμές - με νέα δεδομένα, ο τροποποιημένος κώδικας λειτουργεί καλά και ο παλιός δεν χωνεύει οργανικά. Αυτό δεν είναι να πιάσει εδώ αποτυχία, αυτές οι λειτουργίες είναι καλύτερες να ελέγξουν αμέσως. Θυμηθείτε απλό κανόνα: Δεν υπάρχει χρόνος για να καλύψετε όλες τις δοκιμές κώδικα - κόψτε το πιο σημαντικό κομμάτι αυτό.


    Όσον αφορά τους συμπιεσμένους όρους, συμφωνώ, αλλά σύμφωνα με τον περιττό κώδικα είναι έτοιμο να υποστηρίξει. Από τη μία πλευρά, ναι - οι δοκιμές απαιτούν έναν πρόσθετο κώδικα, πράγμα που σημαίνει ότι ο χρόνος για να το γράψει. Από την άλλη πλευρά, ο κώδικας αυτός εκτελεί το ρόλο των αερόσακων στο αυτοκίνητο και πρέπει να εξοφλήσει με αύξηση της εφαρμογής.
    • Cristian Johansen "εξέλιξη JavaScript" (goo.gl/me6is) είναι ένα από τα λίγα βιβλία που βλέπουν το JavaScript όσον αφορά τις δοκιμές γραφής.
    • JOHN REVING, BIBO BIBO "SECRETS JavaScript Ninja" (goo.gl/xqudkj) - ένα καλό βιβλίο που είναι χρήσιμο κυρίως από τους προγραμματιστές JS με μέσο όρο εκπαίδευσης. Το βιβλίο περιγράφει λεπτομερώς τα ζητήματα της σύνταξης ενός αποτελεσματικού κωδικού διασταυρούμενου προγράμματος περιήγησης, αποχετεύσεις επεξεργασίας συμβάντων και πολλά άλλα καλούδια.
    • David Flanagan "JavaScript. Πλήρης οδηγός "(goo.gl/rzjjjk) - το βιβλίο ανατυπώθηκε έξι φορές και κάθε απελευθέρωση γίνεται μπεστ σέλερ. Πράγματι, αυτός είναι ο πιο λεπτομερής οδηγός JavaScript, ο οποίος είναι υποχρεωμένος να διαβάσει κάθε προγραμματιστή JS τουλάχιστον μία φορά.
    • Phantomjs + jscoverage + qunit ή κονσόλα JS δοκιμές μονάδων με μετρήσεις μέτρησης (goo.gl/fyq38) - ο συντάκτης του άρθρου καταδεικνύει τη χρήση συνδεδεμένων συσκευασιών σύνδεσης συνδέσμων για τη συλλογή στατιστικών στοιχείων και την καταμέτρηση του ποσοστού των δοκιμών κάλυψης κώδικα.
    • Χρήσιμα παραδείγματα χρήσης Phantomjs - Η σελίδα δείχνει μια μεγάλη ποσότητα χρήσης PhantomJs Combat.

    Όταν δεν υπάρχει χρόνος και βασανισμένοι στην επιθυμία να εγκαταλείψουν τις δοκιμές γραφής - σκεφτείτε τρεις φορές. Ίσως, σε αυτή την περίπτωση, είναι σκόπιμο να καλύψουμε τις δοκιμές μόνο τις πιο χαριτωμένες περιοχές του κώδικα και να μην εγκαταλείψουν εντελώς τις δοκιμές. Πάντα σκεφτείτε με ένα πεδίο για το μέλλον, σαν σε ένα μήνα το πρόγραμμά σας να αναπτυχθεί σε πρωτοφανή μεγέθη.

    Δεν ελέγχεται ο κωδικός

    Γιατί υποστηρίζω ότι πρέπει να σκεφτείτε τη δοκιμή πριν γράψετε τον κύριο κώδικα; Ναι, επειδή ο κώδικας που αρχικά αναμένεται να καλύψει τις δοκιμές μονάδας γράφεται με ελαφρώς διαφορετικό ύφος. Δεν μπορεί να δοκιμαστεί όλοι οι κώδικες. Ο κώδικας στον οποίο η λογική και η αναπαράσταση αναμειγνύεται και εξακολουθεί να μην κατανοεί πού, είναι αδύνατο να δοκιμαστεί κανονικά. Εδώ σας συμβουλεύω πάντα να τηρήσετε με λίγους απλούς κανόνες:

    • Δεν χρειάζεται να γράψετε μεγάλες λειτουργίες. Κάθε λειτουργία πρέπει να λύσει ένα πρόβλημα και όχι 100.500 πιθανές καταστάσεις. Για παράδειγμα, δεν χρειάζεται να κρεμάσετε τα δεδομένα για να στείλετε δεδομένα στο διακομιστή στη λειτουργία που είναι υπεύθυνη για την παρασκευή τους.
    • Μια λειτουργία που αποτελείται από περισσότερες από δέκα γραμμές κώδικα, πιθανότατα μια κακή λειτουργία.
    • Η λογική και η εκπροσώπηση σε καμία περίπτωση δεν πρέπει να είναι μαζί.

    Qunit - κλασικό είδος από τους δημιουργούς του jquery

    Το qnit είναι εξαιρετικά δημοφιλές μεταξύ των προγραμματιστών JavaScript. Πρώτον, είναι καλά τεκμηριωμένο και εύκολο στη χρήση και, δεύτερον, δημιουργείται από τους συγγραφείς JQuery. Η βιβλιοθήκη είναι κατάλληλη για τη δοκιμή του κώδικα όπως δημιουργήθηκε με βάση το JQuery και το Native JavaScript.


    Τοποθετήστε την τελευταία έκδοση του QUNIT που μπορείτε από την επίσημη ιστοσελίδα. Η βιβλιοθήκη έρχεται με τη μορφή ενός αρχείου JS και CSS. Ας υποθέσουμε ότι με τη λήψη των απαραίτητων εξαρτημάτων που καταλάβατε, και αν ναι, τότε ο χρόνος για να γράψετε μια δοκιμή δοκιμής. Ας μην πάμε μακριά και να προσπαθήσουμε να δοκιμάσουμε τη λειτουργία Trim ().

    Για να αποδείξω τις δοκιμές, δημιούργησα το απλούστερο έργο με την ακόλουθη δομή:

    • Το Index.html είναι το κύριο αρχείο που θα εμφανίσει τα αποτελέσματα των δοκιμών.
    • qunit-1.12.0.js - αρχείο qunit βιβλιοθήκη;
    • Παράδειγμα.js - ένα αρχείο που περιέχει έναν κώδικα δοκιμής (στην περίπτωση μας μια περιγραφή της λειτουργίας Trim ()).
    • test.js - αρχείο με δοκιμές.
    • qUNIT-1.12.0.CSS - Στυλ για εγγραφή της έκθεσης με δοκιμές.

    Τα περιεχόμενα του αρχείου index.html και test.js αντιπροσωπεύονται στην καταχώριση 1 και 2. το μεγαλύτερο μέρος του συνόλου που μας ενδιαφέρει η δεύτερη λίστα, η οποία παρέχει μια διαφήμιση για μια δοκιμαστική λειτουργία (Trim (Trim ()) και τον κώδικα δοκιμής για να δοκιμάσετε το εκτέλεση. Δώστε προσοχή, η ίδια η λειτουργία Trim () μπορεί να τοποθετηθεί οπουδήποτε, το συντρίψαμε στη δεύτερη λίστα μόνο για εξοικονόμηση χώρου στο περιοδικό.
    Τώρα κοιτάξτε τις δοκιμές μόνοι σας. Η βιβλιοθήκη qunit.js μας προσφέρει μια σειρά μεθόδων:

    • Δοκιμή () - περιτύλιγμα για να περιγράψει τη δοκιμή.
    • oK () - Η έγκριση σας επιτρέπει να ελέγξετε την αλήθεια της πρώτης παραμέτρου. Στο παράδειγμά μας, της δίνω την πρόκληση της λειτουργίας του Trim () και συγκρίνω με την αξία που περιμένω να λάβω. Εάν η κατάσταση είναι αληθής - η δοκιμή πέρασε.
    • Ίση () - Η μέθοδος σάς επιτρέπει να ελέγχετε την ισότητα της πρώτης και δεύτερης παραμέτρου. Προσέξτε αμέσως ότι αυτή η μέθοδος εκτελεί μη αυστηρή δοκιμή, επομένως είναι κατάλληλη για τις κλιμακωμένες τιμές.
    • Το ωμό () είναι το αντίθετο της ίσης (). Εκτελείται εάν η πρώτη τιμή δεν είναι ίση με τη δεύτερη.
    • strictequal () - παρόμοια με την ισότητα () με μία διαφορά - χρησιμοποιεί αυστηρό έλεγχο (δηλαδή, ελέγχει επίσης τον τύπο δεδομένων).
    • notstrictequal () - η μέθοδος είναι το αντίθετο του strictequal ();
    • Η βαθύτερη () - μέθοδος για αναδρομικές δηλώσεις, χρησιμοποιείται για πρωτίστια, συστοιχίες, αντικείμενα.
    • notdepequal () - η μέθοδος είναι αντίθετη από τα βαθύτερα ();
    • Αυξάνει () - έγκριση για τη δοκιμή των λειτουργιών επανάκλησης που δημιουργούν μια εξαίρεση.

    Στη δεύτερη λίστα, έδειξε οπτικά τον τρόπο εφαρμογής αυτών των μεθόδων στην πράξη. Εάν εκτελέσετε ένα παράδειγμα δοκιμής σε αυτή τη φόρμα, τότε όλες οι δοκιμές θα ολοκληρωθούν με επιτυχία (δείτε την αντίστοιχη εικόνα). Για να δείτε τη διαφορά μεταξύ των επιτυχημένων δοκιμών και τελείωσε με τα λάθη, άλλαξα τον κώδικα μιας δοκιμής ελαφρώς. Σε μια συμβολοσειρά με μια δοκιμή χρησιμοποιώντας το Strictequal (), πρόσθεσα σκόπιμα ένα εσφαλμένο αποτέλεσμα (δείτε την αντίστοιχη εικόνα).

    Καταχώρηση 1. Περιεχόμενο του αρχείου ευρετηρίου.HTML Δοκιμές qunit



    Με τη δοκιμή απλών λειτουργιών, φαίνεται να έχει καταλάβει. Σε κάθε περίπτωση, δεν έχω τίποτα περισσότερο να προσθέσω. Στη συνέχεια, πρέπει να κάνετε έναν πραγματικό κώδικα και να δοκιμάσετε τον εαυτό σας να γράψετε τις δοκιμές. Ας δούμε την άλλη συχνά προκύπτουν πριν από την JavaScript προγραμματιστές εργασίες - δοκιμές ασύγχρονης λειτουργίες. Η εφαρμογή, γεμισμένη από τον κωδικό JavaScript, είναι 99% αλληλεπιδρά με το τμήμα διακομιστή με Ajax. Είναι επίσης αδύνατο να αφήσετε αυτόν τον κώδικα χωρίς έλεγχο, αλλά οι δοκιμές γραφής θα φαίνονται λίγο διαφορετικές. Εξετάστε ένα παράδειγμα:

    Asynctest ("myasyncfunc ()", λειτουργία () (settimeout (λειτουργία () \u003d\u003d true, "τα δεδομένα μεταφέρονται με επιτυχία"). Έναρξη ()), 500);)).

    Η κύρια διαφορά αυτού του παραδείγματος από την προηγούμενη - αντί του δοκιμαστικού () περιτυλίγματος () εφαρμόζει το Asynctest (), δηλώνει άμεσα ότι ενδιαφέρεται για ασύγχρονες δοκιμές. Στη συνέχεια ξεκινώ τον χρόνο αναμονής των 500 χιλιοστών του δευτερολέπτου. Κατά τη διάρκεια αυτής της περιόδου, η λειτουργία Myasyncfunc () πρέπει να μεταφέρει δεδομένα στον διακομιστή δοκιμής και, αν όλα εντάξει, επιστρέψτε. Εδώ έρχεται η πιο ενδιαφέρουσα στιγμή. Όταν ο asynctest () καλείται, η ροή εκτέλεσης σταματά και στο τέλος της δοκιμής είναι απαραίτητο να το εκτελέσετε μόνοι σας. Για τον έλεγχο του χρόνου εκτέλεσης στο QUNIT, υπάρχουν μέθοδοι εκκίνησης () και διακοπής () ().


    Δοκιμές ασύγχρονης λειτουργίας χρησιμοποιώντας τη βιβλιοθήκη Qunit είναι αρκετά απλή. Το τελευταίο παράδειγμα που θα ήθελα να αποσυναρμολογήσω συνδέεται με τη σύνταξη μιας δοκιμής που εκτελεί αρκετούς ασύγχρονους ελέγχους. Το κύριο ερώτημα που συμβαίνει σε τέτοιες εργασίες είναι το βέλτιστο μέρος για να ξεκινήσετε τη ροή εκτέλεσης. Η επίσημη αποβάθρα προτείνει να εφαρμοστεί σε αυτές τις περιπτώσεις κάτι σαν

    Asynctest ("Myasyncfunc (), Λειτουργία () () () (3), // Εδώ κάνουμε τρεις ελέγχους ΟΚ (Myasyncfunc ()," Κάνε τον κόσμο είναι καλύτερο από το 1 "); Εντάξει (Myasyncfunc ()," Κάντε το ο κόσμος καλύτερα από 2 "); ok (myasyncfunc ()," κάνει τον κόσμο είναι καλύτερο από 3 "); setimeout (λειτουργία () (έναρξη ()), 3000);));

    Δοκιμή για δράσεις χρήστη

    Θα πρέπει πάντα να θυμόμαστε ότι πολλά κομμάτια διεπαφής γράφονται στο JavaScript. Για παράδειγμα, ο χρήστης κάνει κλικ στο Pimpe και σε απάντηση στο κλικ του πρέπει να συμβεί κάτι. Ένας τέτοιος κωδικός "διεπαφής" σε έργα έχει ένα τεράστιο ποσό και είναι επίσης απαραίτητο να καλύψουμε τις δοκιμές. Ας δούμε πώς μπορείτε να προσομοιώσετε ένα προσαρμοσμένο πληκτρολόγιο και να γράψετε μια ξεχωριστή δοκιμή για αυτή τη δράση. Φανταστείτε ότι έχουμε ένα συγκεκριμένο χαρακτηριστικό που καταγράφει τα κλειδιά. Ο κώδικας της οδήγησε στην τρίτη λίστα.

    Καταχώρηση 3. Καταγραφή συμπληρωματικών λειτουργιών Keylogger (Target) Keys (εάν (! (Αυτό το παράδειγμα Keylogger)) (επιστροφή νέου keylogger (στόχος);) αυτό.Target \u003d στόχος; this.log \u003d; var self \u003d αυτό? Αυτό.target. Απενεργοποίηση ("Κλείδωμα"). Στο ("Κλείδωμα", λειτουργία (συμβάν) (self.log.push (event.Keycode)));).

    Τώρα ας προσπαθήσουμε να δοκιμάσουμε αυτή τη λειτουργία. Πρώτα απ 'όλα στο σώμα της δοκιμής, πρέπει να μιμηθούμε το συμπιεσμένο κλειδί. Ο ευκολότερος τρόπος να κάνετε με τη βιβλιοθήκη JQuery, η οποία σας επιτρέπει να δημιουργήσετε ένα συμβάν σε ένα ζευγάρι γραμμών κώδικα (βλ. Καταχώρηση 4).

    Καταχώρηση 4. Κωδικός δοκιμής για δοκιμή Keylogger ("Δοκιμή εγγραφής κλειδιού", λειτουργία () (inf) .KeyCode \u003d 9; $ doc.trigger (συμβάν); ίση (keys.log.length, 1, "κλειδί είναι γραμμένο"). Ίση (Keys.log, 9, "Πατώντας ένα κλειδί με κωδικό 9"))))) ;

    Στην αρχή της λίστα με τη δοκιμή, προετοιμάζουν ένα γεγονός για την εξομοίωση της πληκτρολόγησης - "keydown". Θα σας ενδιαφέρουν να πιέσουμε το πλήκτρο TAB (κωδικός 9). Στη συνέχεια, χρησιμοποιώντας τη μέθοδο Trigger (), στέλνω ένα μαγειρεμένο συμβάν, μετά το οποίο μπορείτε να προχωρήσετε στη δοκιμή. Ελέγξτε πρώτα τη συνολική εικόνα - αν το πλήκτρο πιέστηκε και στη συνέχεια ο κώδικας του.

    Dom υπό την κάλυψη των δοκιμών

    Μόλις qunit.js σας επιτρέπει να δοκιμάσετε τις ενέργειες χρηστών, στη συνέχεια, με τις δοκιμές γραφής για το DOM, δεν πρέπει επίσης να υπάρχει πρόβλημα. Αυτό ισχύει και το παρακάτω παράδειγμα θα επιβεβαιώσει τα λόγια μου. Δεν θα το σχολιάσω, απλά κοιτάξτε τον κώδικα και όλα θα καταστούν σαφή:

    Δοκιμή ("Προσθέστε ένα νέο στοιχείο DIV", λειτουργία () (var $ fixtt \u003d $ ("# qunit-fixture"); $ fixture.Append ("

    Αυτό είναι ένα νέο div
    ") · Ίση ($ (" div ", $ fixture). Μήκος, 1," Νέο DIV με επιτυχία! ");));

    Phantomjs - Εκτελέστε τις δοκιμές από την κονσόλα


    Οι δοκιμές εγγραφής χρησιμοποιώντας τη βιβλιοθήκη qnit.js είναι βολική και εύκολη, αλλά αργά ή γρήγορα θα επισκεφθείτε την επιθυμία να αυτοματοποιήσετε με κάποιο τρόπο την εκτόξευση, τη δοκιμή και τη συλλογή των αποτελεσμάτων. Για παράδειγμα, έχω μια ξεχωριστή εικονική μηχανή στο DigitalCean για αυτή την επιχείρηση, η οποία μπορεί να διαχειρίζεται μόνο με την κονσόλα.

    Αρκεί να λύσει το έργο Phantomjs. Αυτό δεν είναι ένα άλλο πλαίσιο για τη σύνταξη δοκιμών μονάδων, αλλά μια πλήρης έκδοση κονσόλας της μηχανής webkit. Εάν λέτε ευκολότερη, τότε αυτή η εφαρμογή εξουδετερώνει το πρόγραμμα περιήγησης. Χρησιμοποιώντας Phantomjs, δεν είναι δυνατόν να μην είναι εύκολο να αυτοματοποιήσετε τις δοκιμαστικές δοκιμές και να λύσετε πολλές εργασίες, αργά ή γρήγορα προκύπτουν από τον προγραμματιστή: απόκτηση των αποτελεσμάτων της απόδοσης σελίδων στο αρχείο (PNG, JPG), τη λειτουργία της οθόνης δικτύου (ταχύτητα λήψης, συνολικής απόδοσης κ.λπ.), εξομοίωση των ενεργειών χρήστη και ούτω καθεξής. Σας συνιστούμε να μην είστε τεμπέλης και να διαβάσετε την επίσημη τεκμηρίωση για αυτό το έργο, σίγουρα θα βρείτε κάτι ενδιαφέρον για τον εαυτό σας.

    Οι PhantomJs μπορούν να συλλεχθούν για διαφορετικές πλατφόρμες (* Nix, OS X, Windows). Εάν είστε όλοι σχεδιασμένοι για τα Windows, τότε δεν υπάρχουν προβλήματα - ανακουφίστε τα δυαδικά αρχεία και προχωρήστε. Μπορεί να προκύψουν μικρές δυσκολίες με την εκτόξευση εάν έχετε εγκαταστήσει δύο προσαρμογείς βίντεο, μία από τις οποίες η NVIDIA. Σε αυτή την περίπτωση, θα πρέπει να χρησιμοποιήσετε το hack που περιγράφεται στην εισαγωγή.


    Ας προσπαθήσουμε να εξοικειωθούμε με phantomjs στην πράξη. Για να παραλείψετε τις δοκιμές Phantomjs που προετοιμάζονται στο παρελθόν τμήμα και λάβετε τα αποτελέσματα της εκτέλεσης στην κονσόλα, θα χρειαστούμε ένα ειδικό σενάριο λογότησης - run-qnit.js. Ανοίξτε την κονσόλα (εργάζομαι στα Windows, οπότε χρησιμοποιώ cmd) και κάντε κλικ στην εντολή σε μορφή

    phantom.exe.<путь к run-qunit.js> <путь к странице с тестами>

    Στην περίπτωσή μου, η εντολή εκκίνησης αποδείχθηκε:

    Ε: \\ soft \\ phantomjs\u003e phantomjs.exe e: \\ temp \\ testjsforx qunit \\ run-qunit.js αρχείο: /// e: / eemp/testjsforx/qunit/index.html

    Το αποτέλεσμα της εκτέλεσής του:

    Οι δοκιμές ολοκληρώθηκαν σε 2592 χιλιοστά του δευτερολέπτου. 9 Οι ισχυρισμοί των 9 πέρασαν, 0 απέτυχε.

    Όλες οι δοκιμές πέρασαν.

    Δοκιμές κώδικα καλύμματος που απαιτούνται μοναδικά και δεν έχει σημασία ποια κλίμακα δημιουργείτε την εφαρμογή. Για άλλη μια φορά υπενθυμίζω: Ακόμη και τα μικρότερα προγράμματα μετατρέπονται στα στιβαρά τέρατα, τα οποία πρέπει να διατηρηθούν και να τελειώνουν λειτουργικότητα. Καλά καλυμμένο με κώδικα δοκιμών - ένα κλειδί για την επιτυχία και την ποιότητα. Ναι, έτσι αρχίστε αμέσως να γράφετε τον κωδικό κατάλληλο για αυτοματοποιημένες δοκιμές δεν είναι εύκολο, αλλά, πιστέψτε με, όλοι αυτοί οι βασανιστές θα πληρώσουν στο μέλλον. Σε αυτό σήμερα έχω τα πάντα, καλή τύχη!

    Phantomjs Προβλήματα στα Windows

    Τόσο συνέβη, αλλά όλα τα παραδείγματα αυτού του άρθρου δεν εξέτασα στο Linux, αλλά κάτω από τα παλιά καλά παράθυρα 7. αποδεικνύεται ότι οι Phantomjs διαθέτουν μικρά προβλήματα όταν εργάζονται σε συστήματα που χρησιμοποιούν αρκετούς προσαρμογείς βίντεο. Στο φορητό υπολογιστή μου, εκτός από το ενσωματωμένο τσιπ βίντεο, η NVIDIA εξακολουθεί να κρέμεται έξω και εξαιτίας αυτού, οι Phantomjs αρνήθηκαν κατηγορηματικά να ανταποκριθούν στην εντολή Phantom.exit (). Ως αποτέλεσμα, μετά την εκτέλεση του σεναρίου, η διαδικασία Phantomjs δεν ολοκλήρωσε το έργο του και συνέχισε να κρεμάσει στη μνήμη. Το παράθυρο Terminal Spected επίσης σταμάτησε να ανταποκρίνεται στις εντολές ολοκλήρωσης ( δεν βοήθησε).

    Εάν αντιμετωπίσατε ένα παρόμοιο πρόβλημα και σχεδιάζετε να χρησιμοποιήσετε phantomjs στα Windows, τότε ετοιμαστείτε να κάνετε το επόμενο hack. Ανοίξτε τον πίνακα ελέγχου NVIDIA. Βρείτε στις παράμετροι του δέντρου 3D. Στη δεξιά πλευρά, πρέπει να εμφανιστεί η επιλογή "Προτιμώμενος γραφικός προσαρμογέας". Από προεπιλογή. Η αξία του καθιερώνεται στο "Avtovyt". Πρέπει να το αλλάξουμε στον "επεξεργαστή υψηλής απόδοσης NVIDIA" ή "ενσωματωμένος γραφικός εξοπλισμός". Μετά από αυτό το απλό κόλπο, οι Phantomjs άρχισαν να συμπεριφέρονται υπάκουα.

    Τώρα στον ιστότοπο είναι διαθέσιμη δοκιμή για γνώση των ακόλουθων θεμάτων: Html, CSS., JavaScript., Php., Sql.

    Κάθε δοκιμή αποτελείται από 10-t. ερωτήσεις σχετικά με ένα συγκεκριμένο θέμα. Προσπάθησα να επηρεάσω τους πιο διαφορετικούς τομείς εφαρμογής μιας συγκεκριμένης γλώσσας προκειμένου να ελέγξετε προσεκτικά το επίπεδο γνώσης σας.

    Φυσικά, όλοι Οι δοκιμές είναι δωρεάν Και ο καθένας μπορεί να τους περάσει.

    Η διαδικασία διέλευσης της δοκιμής:

    1. Πηγαίνετε στη σύνδεση " Ξεκινήστε τις δοκιμές"Στην κατάλληλη δοκιμή.
    2. Απαντήστε σε ερωτήσεις που επιλέγουν μόνο Σωστή επιλογή.
    3. Μετά την ολοκλήρωση των δοκιμών θα δείτε Το σκορ του, Αριθμός λαθών, καθώς Καταστροφή κάθε ερώτησης Από τη ζύμη.

    Προσοχή! Η επιστροφή στην προηγούμενη ερώτηση δεν θα λειτουργήσει, οπότε πριν απαντήσετε, σκεφτείτε.

    Δοκιμές που είναι διαθέσιμες προς το παρόν

    1. Html

      • Ο συνολικός έλεγχος πέρασε: 75424 άτομα
      • Μέση βαθμολογία: 2.83 από 5. Σημεία.

      Δοκιμή για τα βασικά της γνώσης Html. Θα χρειαστείτε γνώση του κύριου Html tagov, καθώς και ικανή χρήση. Είναι επίσης απαραίτητο να κατανοήσουμε τα χαρακτηριστικά του προτύπου XHTML 1.1.

    2. CSS.

      • Ο συνολικός έλεγχος πέρασε: 32828 άτομα
      • Μέση βαθμολογία: 3.37 από 5. Σημεία.

      Η δοκιμή ελέγχει τη γνώση στα βασικά CSS.. Για να περάσετε με επιτυχία τη δοκιμή, θα πρέπει να γνωρίζετε τους κύριους τύπους επιλογών (σύνταξή τους), να γνωρίζουν τις κύριες ιδιότητες και τις πιθανές τιμές τους και γνωρίζουν επίσης το διορισμό των πιο δημοφιλών ψευδο-στοιχείων.

    3. JavaScript.

      • Ο συνολικός έλεγχος πέρασε: 24845 άτομα
      • Μέση βαθμολογία: 3.31 από 5. Σημεία.

      Αυτή η δοκιμή ελέγχει τις γνώσεις σας μέσω JavaScript. Οι ερωτήσεις από τη δοκιμή επηρεάζουν διαφορετικούς τομείς εφαρμογής αυτής της γλώσσας. Υπάρχουν πολλές ερωτήσεις σχετικά με την κατανόηση των "μικρών" αποχρώσεων. Οι υπόλοιποι χρειάζεστε γνώση βασικών πραγμάτων: εργασία με μεταβλητές, βασικές λειτουργίες JavaScript, προτεραιότητες λειτουργίας, και ούτω καθεξής.

    4. Php.

      • Ο συνολικός έλεγχος πέρασε: 33239 άτομα
      • Μέση βαθμολογία: 3.03 από 5. Σημεία.

      Αυτή η δοκιμή ελέγχει τις γνώσεις σας στο PHP. Χρειάζεται η γνώση των βασικών δομών της PHP, να εργαστείτε με μεταβλητές, συνεδρίες, πωλήσεις ανακατεύθυνσης και άλλα πρότυπα πράγματα.
      Καλό αίτημα: Η δοκιμή περιέχει πολλές ερωτήσεις ανά τύπο: "Τι θα φέρει το σενάριο;". Μεγάλο αίτημα, μην το αντιγράψετε και ελέγξτε. Να είστε ειλικρινείς πριν από τον εαυτό σας.

    5. Sql

      • Ο συνολικός έλεγχος πέρασε: 18014 άνθρωποι
      • Μέση βαθμολογία: 3.28 από 5. Σημεία.

      Αυτή η δοκιμή ελέγχει τις γνώσεις σας από τη γλώσσα ερωτημάτων SQL. Οι ερωτήσεις επηρεάζουν μόνο τις πιο βασικές γνώσεις αυτής της γλώσσας, χωρίς εμβάθυνση. Θα χρειαστείτε γνώση των πιο βασικών αιτημάτων SQL, καθώς και την ικανή χρήση τους.

    Συνεχίζοντας το θέμα:
    Λινάρι

    Ο χρήστης στην ορολογία των προδιαγραφών) είναι ένα λογισμικό στο πλάι του συνδρομητή, το οποίο σας επιτρέπει να λαμβάνετε, να στείλετε, να δείτε και να επεξεργαστείτε ...

    Νέα άρθρα
    /
    Δημοφιλής