Inhaltsverzeichnis
Was ist die Idee?
für eine fortgeschrittenere Version eines äquivalenten Laufs (..) Mixin, überprüfen Sie die von include-media.
Idealerweise sollte Gulp idealerweise ordnungsgemäß beenden. Leider gibt es ein Problem damit bei Gulp-Ruby-Sass, das noch nicht behoben ist. Für Ruby Sass müssen wir einen Knoten
Im Voraus feuert der Pre-Commit-Haken und versucht das Test-NPM-Skript auszuführen. In diesem Skript wird der folgende Befehl ausgeführt: Gulp -Test, der den Gulpen für die Ausführung der Tests erhöht.
Heim Web-Frontend js-Tutorial Testen einer Sass -Bibliothek

Testen einer Sass -Bibliothek

Feb 19, 2025 pm 12:38 PM

Testen einer Sass -Bibliothek

In letzter Zeit habe ich eine anständige Zeit damit verbracht, mit Eduardo Bouças auf Include-Media zu arbeiten. Wir haben viel Refactoring durchlaufen, also beschlossen, einige Tests zu schreiben und sie in jedem Commit durchzuführen, um sicherzugehen, dass wir nichts gebrochen haben. Ich werde die Details in diesem Artikel durchgehen.

Wenn Sie noch nicht wissen, dass es include-media ist, ist es ein sehr leicht und dennoch leistungsstarker Breakpoint-Manager in SASS.

Die bereitgestellte öffentliche API ist ein einzelner Mixin, Medien (..) (daher der Name der Bibliothek), aber das Ganze ist gut genug gedacht, damit Sie tatsächlich Wunder damit tun können. Ein kurzes Beispiel vor dem Beginn:

<span>.my-component {
</span><span>  <span>width: 100%;</span>
</span>
  <span>// On screens larger or equal to *small* breakpoint,
</span>  <span>// make the component floated and half the size
</span><span>  <span>@include media('≥small') {</span>
</span><span>    <span>float: left;</span>
</span><span>    <span>width: 50%;</span>
</span>  <span>}
</span><span>}</span>
Nach dem Login kopieren
Nach dem Login kopieren

Das ist ziemlich rad, oder?

Wie auch immer, also haben wir ein kleines Testsystem entwickelt, das ich gerne mit euch teilen möchte. Wenn Sie ein vollständiges Framework testen möchten, sollten Sie stattdessen TRUE von Eric Suzanne verwenden, was ein in Sass geschriebenes volles Test -Rahmen für SASS ist und von David in einem kürzlich auf SitePoint vorliegenden Artikel vorgestellt und erklärt wurde.

Was ist die Idee?

Wir wollten ein paar Tests über die Hauptfunktionen der Hauptbibliothek aus der Bibliothek durchführen, wenn wir uns zum Repository verpflichten. Wenn ein Test fehlschlägt, wird das Komitee abgebrochen und der Code muss behoben werden, damit das Verabschiedung das Verabschiedung ermöglicht. Auf diese Weise stellen wir sicher, dass wir sicher in der Bibliothek arbeiten können, ohne sie zu brechen (was normalerweise ein schlechtes ist).

so etwas wie dieses war überraschend einfach: Wir haben einen Pre-Commit Git-Hook eingerichtet, um Tests sowohl in libsass als auch in Ruby-Sass vor dem Vorgehen durchzuführen. Wenn der Test fehlschlägt, töten wir den Prozess.

Testen einer Sass -Bibliothek

Es gibt verschiedene Möglichkeiten, Sass und Libsass zu betreiben. Sie können entweder Binärdateien haben oder einen Wrapper verwenden. In unserem Fall haben wir uns für einen winzigen Gulp -Workflow entschieden, was es uns leicht macht, sowohl Ruby Sass als auch Libas zu laufen.

Wir wollten etwas sehr Einfaches, daher werden Tests mit Sassytester in SASS geschrieben, die ich kürzlich im Artikel in 5 Minuten getestet habe, um eine SASS -Funktion zu testen. Sassytester ist ungefähr 25 Zeilen lang. Die Testfunktion gibt nur eine SASS -Karte mit den Ergebnissen aus den Tests aus. Von dort aus können wir alles tun, was wir wollen. In unserem Fall möchten wir einen Fehler werfen, wenn ein Test fehlschlägt. Dazu haben wir die @Error -Richtlinie von Sass!

Beim Kompilieren der SASS-Tests, wenn die Gulp-Aufgabe auf einen SASS-Fehler trifft, verlässt sie den Prozess, während er selbst einen Fehler auswirft, der sich bis zum Vorkommiten-Haken auswirkt und schließlich das Komitee abbricht.

Wenn wir dies zusammenfassen, geht es so:

  1. Ein Pre-Commit-Hook führt eine Test-Gulp-Aufgabe in Commit
  2. aus
  3. Die Test -Gulp -Aufgabe erstellt SASS -Tests sowohl in libsass als auch in Ruby Sass
  4. Wenn ein Test fehlschlägt, wirft SASS einen Fehler mit @Error
  5. aus
  6. Der SASS -Fehler wird von Gulp erfasst, der selbst einen Fehler ausgibt
  7. Der Gulp-Fehler wird vom Pre-Commit-Haken erfasst, der das Commit
abbricht

so weit, so gut?

Einrichten der Testarchitektur

Die Architektur

Wort klingt so groß, während es tatsächlich extrem einfach ist. So könnte das Projekt aussehen:
<span>.my-component {
</span><span>  <span>width: 100%;</span>
</span>
  <span>// On screens larger or equal to *small* breakpoint,
</span>  <span>// make the component floated and half the size
</span><span>  <span>@include media('≥small') {</span>
</span><span>    <span>float: left;</span>
</span><span>    <span>width: 50%;</span>
</span>  <span>}
</span><span>}</span>
Nach dem Login kopieren
Nach dem Login kopieren

Nicht so beeindruckend, heh? In der Gulp -Aufgabe werden die Sass -Motoren einfach in allen Dateien im Ordner Tests ausgeführt. Hier ist, was Funktion-1.Scss aussehen könnte:
dist/
<span>|
</span><span>|- my-sass-library.scss
</span><span>|
</span>tests/
<span>|
</span><span>|- helpers/
</span><span>|   |- _SassyTester.scss
</span><span>|   |- _custom-formatter.scss
</span><span>|
</span><span>|- function-1.scss
</span><span>|- function-2.scss
</span><span>|- ...</span>
Nach dem Login kopieren

Zu guter Letzt müssen wir den Lauf (..) neu definieren (..), da das Original von Sassytester die Tests mit @Error ausgibt, unabhängig davon, ob sie alle bestehen oder nicht. In unserem Fall möchten wir nur dann werfen, wenn ein Fehler vorliegt. Lassen Sie es einfach in Helpers/_output-formatter.scss.
<span>// Import the library to test (or only the function if you can)
</span><span><span>@import '../dist/my-sass-library';</span>
</span>
<span>// Import the tester
</span><span><span>@import 'helpers/SassyTester';</span>
</span>
<span>// Import the custom formatter
</span><span><span>@import 'helpers/custom-formatter';</span>
</span>
<span>// Write the tests
</span><span>// See my previous article to know more about this:
</span><span>// http://...
</span><span><span>$tests-function-1: ( ... );</span>
</span>
<span>// Run the tests
</span><span><span>@include run(test('function-1', $tests-function-1));</span></span>
Nach dem Login kopieren
einfügen.

für eine fortgeschrittenere Version eines äquivalenten Laufs (..) Mixin, überprüfen Sie die von include-media.

Der Gulp Workflow

Wenn Sie eine kurze Einführung in Gulp wünschen, lesen Sie bitte meinen letzten Artikel darüber: einen einfachen Gulpy -Workflow für SASS. Für diesen Abschnitt gehe ich davon aus, dass Sie mit Gulp vertraut sind.

    Wir brauchen drei Aufgaben:
  • eins, um libsass auf dem Testsordner (mit Gulp-Sass)
  • auszuführen
  • eins zum Ausführen von Ruby Sass im Testsordner (unter Verwendung von Gulp-Ruby-Sass)
<span>// We overwrite the `run(..)` mixin from SassyTester to make it throw
</span><span>// an `@error` only if a test fails. The only argument needed by the
</span><span>// `run(..)` mixin is the return of `test(..)` function from SassyTester.
</span><span>// You can check what `$data` looks like in SassyTester documentation:
</span><span>// http://kittygiraudel.com/SassyTester/#function-test
</span><span><span>@mixin run($data) {</span>
</span><span>  <span>$tests: map-get($data, 'tests');</span>
</span>
<span>  <span>@each $test in $tests {</span>
</span><span>    <span>@if map-get($test, 'fail') {</span>
</span><span>      <span>@error 'Failing test!</span>
</span><span>        <span>Expected : #{map-get($test, 'expected')}</span>
</span><span>        <span>Actual   : #{map-get($test, 'actual')}';</span>
</span>    <span>}
</span>  <span>}
</span><span>}</span>
Nach dem Login kopieren

eins, um die beiden vorherigen Aufgaben auszuführen

Idealerweise sollte Gulp idealerweise ordnungsgemäß beenden. Leider gibt es ein Problem damit bei Gulp-Ruby-Sass, das noch nicht behoben ist. Für Ruby Sass müssen wir einen Knoten

mit Prozess

mit Prozess (1) selbst nicht erfassen.

Hinzufügen eines Pre-Commit-Hooks Es gibt unzählige Bibliotheken, um Pre-Commit-Haken einzurichten. Ich persönlich mag Pre-Commit, aber Sie können im Grunde diejenigen wählen, die Sie mögen, da sie alle mehr oder weniger dasselbe tun.

<span>var gulp = require('gulp');
</span><span>var sass = require('gulp-sass');
</span><span>var rubySass = require('gulp-ruby-sass');
</span>
<span>// Run LibSass on the tests folder
</span><span>// Gulp automatically exits process in case of Sass error
</span>gulp<span>.task('test:libsass', function () {
</span>  <span>return gulp.src('./tests/*.scss')
</span>    <span>.pipe(plugins.sass());
</span><span>});
</span>
<span>// Run Ruby Sass on the tests folder
</span><span>// Gulp manually exits process in case of Sass error
</span>gulp<span>.task('test:ruby-sass', function () {
</span>  <span>return rubySass('./tests')
</span>    <span>.on('error', function (err) {
</span>      process<span>.exit(1);
</span>    <span>});
</span><span>});
</span>
gulp<span>.task('test', ['test:libsass', 'test:ruby-sass']);</span>
Nach dem Login kopieren
Um unserem Projekt einen Pre-Commit-Haken hinzuzufügen, müssen wir in unserem Paket.json einen Taste vor dem Kommando erstellen. Dieser Schlüssel wird einem Array von

npm -Skripten

-Hellbefehl zugeordnet. Somit benötigen wir auch ein Skriptsobjekt mit einem Schlüssel mit dem Namen, der dem Gulp -Befehl zugeordnet ist: Gulp -Test.

Im Voraus feuert der Pre-Commit-Haken und versucht das Test-NPM-Skript auszuführen. In diesem Skript wird der folgende Befehl ausgeführt: Gulp -Test, der den Gulpen für die Ausführung der Tests erhöht.

Das ist es, wir sind fertig.

endgültige Gedanken Testen einer Sass -Bibliothek

Dieses Beispiel ist äußerst simpel, wie Sie sehen können, aber es macht den Job und macht es gut. So könnte es aussehen:

Was denkst du? Ist dies etwas, das Sie in Betracht ziehen könnten, in Ihre Bibliothek oder Ihr Framework hinzuzufügen?

Das obige ist der detaillierte Inhalt vonTesten einer Sass -Bibliothek. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

<🎜>: Bubble Gum Simulator Infinity - So erhalten und verwenden Sie Royal Keys
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Nordhold: Fusionssystem, erklärt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Mandragora: Flüstern des Hexenbaum
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Java-Tutorial
1673
14
PHP-Tutorial
1278
29
C#-Tutorial
1257
24
Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit Python vs. JavaScript: Die Lernkurve und Benutzerfreundlichkeit Apr 16, 2025 am 12:12 AM

Python eignet sich besser für Anfänger mit einer reibungslosen Lernkurve und einer kurzen Syntax. JavaScript ist für die Front-End-Entwicklung mit einer steilen Lernkurve und einer flexiblen Syntax geeignet. 1. Python-Syntax ist intuitiv und für die Entwicklung von Datenwissenschaften und Back-End-Entwicklung geeignet. 2. JavaScript ist flexibel und in Front-End- und serverseitiger Programmierung weit verbreitet.

JavaScript und das Web: Kernfunktionalität und Anwendungsfälle JavaScript und das Web: Kernfunktionalität und Anwendungsfälle Apr 18, 2025 am 12:19 AM

Zu den Hauptanwendungen von JavaScript in der Webentwicklung gehören die Interaktion der Clients, die Formüberprüfung und die asynchrone Kommunikation. 1) Dynamisches Inhaltsaktualisierung und Benutzerinteraktion durch DOM -Operationen; 2) Die Kundenüberprüfung erfolgt vor dem Einreichung von Daten, um die Benutzererfahrung zu verbessern. 3) Die Aktualisierung der Kommunikation mit dem Server wird durch AJAX -Technologie erreicht.

JavaScript in Aktion: Beispiele und Projekte in realer Welt JavaScript in Aktion: Beispiele und Projekte in realer Welt Apr 19, 2025 am 12:13 AM

Die Anwendung von JavaScript in der realen Welt umfasst Front-End- und Back-End-Entwicklung. 1) Zeigen Sie Front-End-Anwendungen an, indem Sie eine TODO-Listanwendung erstellen, die DOM-Operationen und Ereignisverarbeitung umfasst. 2) Erstellen Sie RESTFUFFUPI über Node.js und express, um Back-End-Anwendungen zu demonstrieren.

Verständnis der JavaScript -Engine: Implementierungsdetails Verständnis der JavaScript -Engine: Implementierungsdetails Apr 17, 2025 am 12:05 AM

Es ist für Entwickler wichtig, zu verstehen, wie die JavaScript -Engine intern funktioniert, da sie effizientere Code schreibt und Leistungs Engpässe und Optimierungsstrategien verstehen kann. 1) Der Workflow der Engine umfasst drei Phasen: Parsen, Kompilieren und Ausführung; 2) Während des Ausführungsprozesses führt die Engine dynamische Optimierung durch, wie z. B. Inline -Cache und versteckte Klassen. 3) Zu Best Practices gehören die Vermeidung globaler Variablen, die Optimierung von Schleifen, die Verwendung von const und lass und die Vermeidung übermäßiger Verwendung von Schließungen.

Python gegen JavaScript: Community, Bibliotheken und Ressourcen Python gegen JavaScript: Community, Bibliotheken und Ressourcen Apr 15, 2025 am 12:16 AM

Python und JavaScript haben ihre eigenen Vor- und Nachteile in Bezug auf Gemeinschaft, Bibliotheken und Ressourcen. 1) Die Python-Community ist freundlich und für Anfänger geeignet, aber die Front-End-Entwicklungsressourcen sind nicht so reich wie JavaScript. 2) Python ist leistungsstark in Bibliotheken für Datenwissenschaft und maschinelles Lernen, während JavaScript in Bibliotheken und Front-End-Entwicklungsbibliotheken und Frameworks besser ist. 3) Beide haben reichhaltige Lernressourcen, aber Python eignet sich zum Beginn der offiziellen Dokumente, während JavaScript mit Mdnwebdocs besser ist. Die Wahl sollte auf Projektbedürfnissen und persönlichen Interessen beruhen.

Python vs. JavaScript: Entwicklungsumgebungen und Tools Python vs. JavaScript: Entwicklungsumgebungen und Tools Apr 26, 2025 am 12:09 AM

Sowohl Python als auch JavaScripts Entscheidungen in Entwicklungsumgebungen sind wichtig. 1) Die Entwicklungsumgebung von Python umfasst Pycharm, Jupyternotebook und Anaconda, die für Datenwissenschaft und schnelles Prototyping geeignet sind. 2) Die Entwicklungsumgebung von JavaScript umfasst Node.JS, VSCODE und WebPack, die für die Entwicklung von Front-End- und Back-End-Entwicklung geeignet sind. Durch die Auswahl der richtigen Tools nach den Projektbedürfnissen kann die Entwicklung der Entwicklung und die Erfolgsquote der Projekte verbessert werden.

Die Rolle von C/C bei JavaScript -Dolmetschern und Compilern Die Rolle von C/C bei JavaScript -Dolmetschern und Compilern Apr 20, 2025 am 12:01 AM

C und C spielen eine wichtige Rolle in der JavaScript -Engine, die hauptsächlich zur Implementierung von Dolmetschern und JIT -Compilern verwendet wird. 1) C wird verwendet, um JavaScript -Quellcode zu analysieren und einen abstrakten Syntaxbaum zu generieren. 2) C ist für die Generierung und Ausführung von Bytecode verantwortlich. 3) C implementiert den JIT-Compiler, optimiert und kompiliert Hot-Spot-Code zur Laufzeit und verbessert die Ausführungseffizienz von JavaScript erheblich.

Python gegen JavaScript: Anwendungsfälle und Anwendungen verglichen Python gegen JavaScript: Anwendungsfälle und Anwendungen verglichen Apr 21, 2025 am 12:01 AM

Python eignet sich besser für Datenwissenschaft und Automatisierung, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python funktioniert in Datenwissenschaft und maschinellem Lernen gut und unter Verwendung von Bibliotheken wie Numpy und Pandas für die Datenverarbeitung und -modellierung. 2. Python ist prägnant und effizient in der Automatisierung und Skripten. 3. JavaScript ist in der Front-End-Entwicklung unverzichtbar und wird verwendet, um dynamische Webseiten und einseitige Anwendungen zu erstellen. 4. JavaScript spielt eine Rolle bei der Back-End-Entwicklung durch Node.js und unterstützt die Entwicklung der Vollstapel.

See all articles