Wenn der Code für den realen Testen von Unit-Testen es viele Situationen erschwert, erschweren sich viele Situationen. Wie überprüfe ich, ob eine Funktion aufgerufen wird? Wie testet ich Ajax -Anrufe? Oder den Code von setTimeout
verwenden? Zu diesem Zeitpunkt müssen Sie verwenden, um den Stand-in zu testen-den Code ersetzen, um das Testen im schwierigen Test einfacher zu testen.
Sinon.js ist seit vielen Jahren der tatsächliche Standard für die Erstellung von Test-Stand-Ins bei JavaScript-Tests. Es ist ein wesentliches Instrument für jeden JavaScript -Entwickler, der Tests schreibt, denn ohne sie ist es fast unmöglich, Tests für echte Anwendungen zu schreiben.
Vor kurzem entsteht eine neue Bibliothek namens testDouble.js. Es hat ein ähnliches Merkmal wie Sinon.js, außer dass es hier und da einige Unterschiede gibt.
In diesem Artikel werden wir untersuchen, was Sinon.js und testDouble.js bereitstellen und ihre jeweiligen Vor- und Nachteile vergleichen. Ist Sinon.js immer noch eine bessere Wahl oder kann der Herausforderer gewinnen?
Hinweis: Wenn Sie mit dem Testen von Stand-Ins nicht vertraut sind, wird empfohlen, zuerst mein Sinon.js-Tutorial zu lesen. Dies wird Ihnen helfen, die Konzepte, die wir hier diskutieren, besser zu verstehen.
Schlüsselpunkte
- Feature-Sets und Terminologie: Sinon.js bietet eine herkömmliche Reihe von Teststörungen, einschließlich Spion In Bezug auf das javaScript-zentrierte Vokabular werden traditionelle Spione beseitigt.
- einfach zu bedienen: testDouble.js hat eine einfachere API, die für Anfänger einfacher ist andere.
- Funktion der Verarbeitung Eingabe: Sinon.js ermöglicht mehr Flexibilität bei Stubs und Behauptungen, Eingabeparameter zu verwenden, ohne unbedingt genaue Übereinstimmungen zu erfordern, was dem strengen Anforderungen des präzisen Parameters, der durch testDouble.js übereinstimmt, nicht ausdrücklich kontrastiert wird, sofern sie nicht explizit konfiguriert sind.
- Unterstützung für Versprechen und Rückrufe: testDouble.js integriert integrierte Unterstützung für Versprechen und bietet leistungsstarke Rückrufbehandlung, die möglicherweise besser für die moderne JavaScript-Entwicklung geeignet sind als Sinon.js, was zusätzliche Informationen erfordert. erreicht werden.
- Modulersatzfunktion: testDouble.js unterstützt das gesamte Modul, das für die Isolierung von Testmodulinteraktionen fördert. Diese Funktion ist in Sinon.js nicht verfügbar, es sei denn
- Reinigung und Wartung: testDouble.js vereinfacht den Reinigungsprozess mit einer einzigen Reset-Funktion und verringert das Risiko, dass verbleibende Teststände andere Tests beeinflussen können, während Sinon.js mehrere Reinigungsmethoden bietet, die problematisch mit der Verwaltung problematisch sind .
Die in diesem Artikel verwendeten Begriffe
Um ein leichtes Verständnis dafür zu gewährleisten, was besprochen wird, finden Sie hier einen schnellen Überblick über die verwendeten Begriffe. Dies sind die Definitionen von Sinon.js und können anderswo etwas variieren.
- Test-Stand-in ist ein Ersatz für die während des Tests verwendeten Funktionen. Es kann auf eine der drei unten genannten Typen verweisen.
- spy ist ein Test-Stand-in, mit dem der Effekt überprüft werden kann, ohne das Verhalten der objektiven Funktion zu beeinflussen.
- Stub ist ein Test-Stand-in, der das Verhalten der objektiven Funktion durch etwas anderes ersetzt, z. B. dem Rückgabewert.
- Simulation ist ein anderer Ansatz als Stubs. Die Simulation enthält eine integrierte Validierung, die ein Ersatz für separate Behauptungen sein kann.
Es ist zu beachten, dass eines der Ziele von testDouble.js darin besteht, die Verwirrung zwischen diesem Begriff zu verringern.
Überblick über Sinon.js und testDouble.js
Schauen wir uns zunächst den grundlegenden Vergleich zwischen Sinon.js und testDouble.js an.
Sinon hat drei verschiedene Testkonzepte: Spy, Stubs und Mocks. Die Idee ist, dass jedes ein anderes Nutzungsszenario darstellt. Dies macht die Bibliothek Menschen aus anderen Sprachen vertrauter oder die Bücher mit derselben Terminologie wie dem Xunit -Testmodus gelesen haben. Andererseits können diese drei Konzepte auch das Verständnis von Sinon machen, wenn er zum ersten Mal verwendet wird. Dies ist ein grundlegendes Beispiel für die Verwendung von Sinon:
// 以下是查看函数调用的参数的方法: var spy = sinon.spy(Math, 'abs'); Math.abs(-10); console.log(spy.firstCall.args); // 输出:[ -10 ] spy.restore(); // 以下是控制函数执行方式的方法: var stub = sinon.stub(document, 'createElement'); stub.returns('not an html element'); var x = document.createElement('div'); console.log(x); // 输出:'not an html element' stub.restore();
Im Gegensatz dazu wählt TestDouble.js eine einfachere API. Anstatt Konzepte wie Spione oder Stubs zu verwenden, verwendet es Sprachen, mit denen JavaScript -Entwickler besser vertraut sind, wie td.function
, td.object
und td.replace
. Dies erleichtert den Einstieg von TestDouble potenziell einfacher und geeigneter für bestimmte Aufgaben. Andererseits sind jedoch einige fortgeschrittenere Verwendungszwecke einfach nicht möglich (was manchmal beabsichtigt ist).
Folgendes ist, wie man testDouble.js verwendet:
// 以下是查看函数调用的参数的方法: var abs = td.replace(Math, 'abs'); Math.abs(-10); var explanation = td.explain(abs); console.log(explanation.calls[0].args); // 输出:[ -10 ] // 以下是控制函数执行方式的方法: var createElement = td.replace(document, 'createElement'); td.when(createElement(td.matchers.anything())).thenReturn('not an html element'); var x = document.createElement('div'); console.log(x); // 输出:'not an html element' // testdouble 使用一次调用重置所有测试替身,无需单独清理 td.reset();
testDouble verwendet eine einfachere Sprache. Wir "ersetzen" die Funktion anstelle von "Stub". Wir benötigen die TestDouble "Interpretation" -Funktion, um Informationen daraus zu erhalten. Abgesehen davon ist es Sinon bisher ziemlich ähnlich.
Dies erstreckt sich auch zum Erstellen von "Anonymous" Test-Stand-in:
var x = sinon.stub();
und
var x = td.function();
Sinons Spione und Stubs haben Attribute, die mehr Informationen zu ihnen liefern. Zum Beispiel bietet Sinon Attribute wie stub.callCount
und stub.args
. Im Fall von TestDouble erhalten wir diese Informationen von td.explain
:
// 我们也可以为测试替身命名 var x = td.function('hello'); x('foo', 'bar'); td.explain(x); console.log(x); /* 输出: { name: 'hello', callCount: 1, calls: [ { args: ['foo', 'bar'], context: undefined } ], description: 'This test double `hello` has 0 stubbings and 1 invocations.\n\nInvocations:\n - called with `("foo", "bar")`.', isTestDouble: true } */
Eine der größten Unterschiede hängt damit zusammen, wie Stubs festgelegt und überprüft werden. Mit Sinon können Sie Befehle nach dem Stub verknüpfen und Behauptungen verwenden, um das Ergebnis zu überprüfen. testDouble.js zeigen Ihnen einfach, wie Sie eine Funktion aufrufen möchten - oder wie Sie einen Funktionsaufruf "proben".
var x = sinon.stub(); x.withArgs('hello', 'world').returns(true); var y = sinon.stub(); sinon.assert.calledWith(y, 'foo', 'bar');
und
var x = td.function(); td.when(x('hello', 'world')).thenReturn(true); var y = td.function(); td.verify(y('foo', 'bar'));
Dies erleichtert die API des TestDouble leichter zu verstehen, da Sie nicht wissen müssen, welche Aktionen auf wann verknüpft werden können.
Vergleiche gemeinsame Testaufgaben ausführlicher
Auf hohem Niveau sind beide Bibliotheken ziemlich ähnlich. Aber was ist mit gemeinsamen Testaufgaben, die Sie möglicherweise in einem echten Projekt ausführen müssen? Mal sehen, wo einige Unterschiede zu erscheinen beginnen.
testDouble.js no Spy
Das erste, was zu beachten ist, ist, dass testDouble.js nicht das Konzept von "Spion" hat. Während Sinon.js es uns ermöglicht, Funktionsaufrufe zu ersetzen, um Informationen von ihnen zu erhalten, während das Standardverhalten der Funktion erhalten bleibt, ist dies in testDouble.js einfach nicht möglich. Wenn Sie die Funktion durch TestDouble ersetzen, verliert sie immer das Standardverhalten.
Aber das ist nicht unbedingt ein Problem. Die häufigste Verwendung von Spione besteht darin, sie zu verwenden, um zu überprüfen, ob Rückrufe aufgerufen werden, was mit td.function
:
var spy = sinon.spy(); myAsyncFunction(spy); sinon.assert.calledOnce(spy);
und
var spy = td.function(); myAsyncFunction(spy); td.verify(spy());
Obwohl es keine große Sache ist, ist es immer noch wichtig, diesen Unterschied zwischen den beiden Bibliotheken zu beachten. Andernfalls sind Sie möglicherweise überrascht, wenn Sie erwarten, dass Sie Spione in testDouble.js auf eine genauere Weise verwenden können.
testDouble.js erfordert eine genauere Eingabe
Der zweite Unterschied, dem Sie begegnen werden, ist, dass TestDouble in der Eingabe strenger ist.
Sinons Stubs und Behauptungen ermöglichen es Ihnen, mit den bereitgestellten Parametern ungenau zu sein. Dies ist am einfachsten mit Beispiel:
zu veranschaulichen:var stub = sinon.stub(); stub.withArgs('hello').returns('foo'); console.log(stub('hello', 'world')); // 输出:'foo' sinon.assert.calledWith(stub, 'hello'); // 没有错误
und
// 以下是查看函数调用的参数的方法: var spy = sinon.spy(Math, 'abs'); Math.abs(-10); console.log(spy.firstCall.args); // 输出:[ -10 ] spy.restore(); // 以下是控制函数执行方式的方法: var stub = sinon.stub(document, 'createElement'); stub.returns('not an html element'); var x = document.createElement('div'); console.log(x); // 输出:'not an html element' stub.restore();
standardmäßig ist es Sinon egal, wie viele zusätzliche Parameter der Funktion bereitgestellt werden. Obwohl es Funktionen wie sinon.assert.calledWithExactly
enthält, wird es nicht als Standardwert in der Dokumentation empfohlen. Funktionen wie stub.withArgs
haben auch keine "genau" Varianten.
testDouble.js dagegen erfordert standardmäßig die angegebenen genauen Parameter. Dies ist Design. Die Idee ist, dass, wenn die Funktion mit einigen anderen Parametern ausgestattet ist, die im Test nicht angegeben sind, dies ein Fehler sein kann und den Test nicht bestehen sollte.
willkürliche Parameter können in testDouble.js angegeben werden, aber dies ist nicht der Standardwert:
// 以下是查看函数调用的参数的方法: var abs = td.replace(Math, 'abs'); Math.abs(-10); var explanation = td.explain(abs); console.log(explanation.calls[0].args); // 输出:[ -10 ] // 以下是控制函数执行方式的方法: var createElement = td.replace(document, 'createElement'); td.when(createElement(td.matchers.anything())).thenReturn('not an html element'); var x = document.createElement('div'); console.log(x); // 输出:'not an html element' // testdouble 使用一次调用重置所有测试替身,无需单独清理 td.reset();
Verwenden ignoreExtraArgs: true
, das Verhalten ähnelt Sinon.js.
testDouble.js hat integrierte Versprechensunterstützung
Während der Verwendung von Sinon.js 'Versprechen ist testDouble.js nicht kompliziert, verfügt über integrierte Methoden, um das Versprechen zurückzugeben und abzulehnen.
var x = sinon.stub();
und
var x = td.function();
Hinweis : Sie können Sinon-As-Verfasser verwenden, um ähnliche bequeme Funktionen in Sinon 1.x zu enthalten. Sinon 2.0 und neuere Versionen enthalten Versprechungsunterstützung in Form von stub.resolves
und stub.rejects
.
Die Rückrufunterstützung für testDouble.js ist leistungsfähiger
Sinon und TestDouble bieten beide eine einfache Möglichkeit, die Stub -Funktions -Rückrufe zu machen. Es gibt jedoch einige Unterschiede in ihrer Funktionsweise.
Sinon verwendet stub.yields
, um den Stub die erste Funktion als Parameter aufzurufen.
// 我们也可以为测试替身命名 var x = td.function('hello'); x('foo', 'bar'); td.explain(x); console.log(x); /* 输出: { name: 'hello', callCount: 1, calls: [ { args: ['foo', 'bar'], context: undefined } ], description: 'This test double `hello` has 0 stubbings and 1 invocations.\n\nInvocations:\n - called with `("foo", "bar")`.', isTestDouble: true } */testDouble.js standardmäßig zum Knotenstilmodus, wobei der Rückruf als der Last
Parameter angenommen wird. Sie müssen es bei der Probe des Anrufs nicht angeben:
var x = sinon.stub(); x.withArgs('hello', 'world').returns(true); var y = sinon.stub(); sinon.assert.calledWith(y, 'foo', 'bar');Was die Rückrufunterstützung von TestDouble leistungsfähiger macht, ist, dass Sie das Verhalten von Szenarien mit mehreren Rückernständen oder verschiedenen Aufträgen von Rückrufen leicht definieren können.
Angenommen, wir wollen
… callback1
nennen
var x = td.function(); td.when(x('hello', 'world')).thenReturn(true); var y = td.function(); td.verify(y('foo', 'bar'));Beachten Sie, dass wir
als Parameter an die Funktion in td.callback
übergeben. Dies sagt TestDouble, welchen Parameter wir als Rückruf verwenden möchten. td.when
var spy = sinon.spy(); myAsyncFunction(spy); sinon.assert.calledOnce(spy);In diesem Fall verwenden wir
statt callsArgWith
. Wir müssen einen bestimmten Index des Aufrufs bereitstellen, damit er funktioniert, was etwas umständlich sein kann, insbesondere bei Funktionen mit vielen Parametern. yields
zwei Rückrufe mit bestimmten Werten aufrufen möchten?
var spy = td.function(); myAsyncFunction(spy); td.verify(spy());Mit Sinon ist das einfach unmöglich. Sie können mehrere Anrufe mit
verknüpfen, aber es wird nur einen von ihnen anrufen. callsArgWith
Zusätzlich zur Ersetzung von Funktionen durch
ermöglicht TestDouble auch das gesamte Modul. td.replace
var stub = sinon.stub(); stub.withArgs('hello').returns('foo'); console.log(stub('hello', 'world')); // 输出:'foo' sinon.assert.calledWith(stub, 'hello'); // 没有错误Wenn wir es durch TestDouble ersetzen möchten, können wir beispielsweise
verwenden ... td.replace('path/to/file')
// 以下是查看函数调用的参数的方法: var spy = sinon.spy(Math, 'abs'); Math.abs(-10); console.log(spy.firstCall.args); // 输出:[ -10 ] spy.restore(); // 以下是控制函数执行方式的方法: var stub = sinon.stub(document, 'createElement'); stub.returns('not an html element'); var x = document.createElement('div'); console.log(x); // 输出:'not an html element' stub.restore();
Obwohl Sinon.js die Mitgliederfunktionen eines Objekts ersetzen kann, kann es keine solchen Module ersetzen. Um dies bei der Verwendung von Sinon zu tun, müssen Sie ein anderes Modul wie Proxyquire oder Redrire verwenden.
// 以下是查看函数调用的参数的方法: var abs = td.replace(Math, 'abs'); Math.abs(-10); var explanation = td.explain(abs); console.log(explanation.calls[0].args); // 输出:[ -10 ] // 以下是控制函数执行方式的方法: var createElement = td.replace(document, 'createElement'); td.when(createElement(td.matchers.anything())).thenReturn('not an html element'); var x = document.createElement('div'); console.log(x); // 输出:'not an html element' // testdouble 使用一次调用重置所有测试替身,无需单独清理 td.reset();
Eine andere Sache, die Sie zum Ersatz für Modul beachten müssen, ist, dass testDouble.js das gesamte Modul automatisch ersetzt. Wenn es sich um einen Funktionsexport wie das Beispiel hier handelt, ersetzt es die Funktion. Wenn es sich um ein Objekt, das mehrere Funktionen enthält, ersetzt es alle. Konstruktoren und ES6 -Klassen werden ebenfalls unterstützt. Sowohl Proxyquire als auch Redrire erfordern, dass Sie einzeln angeben, was und wie ersetzt.
testDouble.js fehlen einige Helferfunktionen für Sinon
Wenn Sie Sinons Emulations -Timer, Emulation XMLHTTPrequest oder Emulationsserver verwenden, werden Sie feststellen, dass sie im TestDouble nicht existieren.
Der Emulations -Timer kann als Plugin verwendet werden, aber die XMLHTTPrequests und Ajax -Funktionen müssen auf unterschiedliche Weise behandelt werden.
Eine einfache Lösung besteht darin, die von Ihnen verwendete AJAX -Funktion zu ersetzen, z
$.post
var x = sinon.stub();zu bereinigen.
Ein häufiger Stolperstein für Anfänger in Sinon.js ist häufig Spione und Stubs. Sinon bietet drei verschiedene Möglichkeiten, dies zu tun, was nicht viel hilft.
oder:
var x = td.function();oder:
// 我们也可以为测试替身命名 var x = td.function('hello'); x('foo', 'bar'); td.explain(x); console.log(x); /* 输出: { name: 'hello', callCount: 1, calls: [ { args: ['foo', 'bar'], context: undefined } ], description: 'This test double `hello` has 0 stubbings and 1 invocations.\n\nInvocations:\n - called with `("foo", "bar")`.', isTestDouble: true } */Normalerweise wird empfohlen, Sandbox und
Methoden anzuwenden, da es ansonsten leicht Stubs oder Spione hinterlassen kann, was zu Problemen mit anderen Tests führen kann. Dies kann zu schweren Kaskadenfehlern führen.
var x = sinon.stub(); x.withArgs('hello', 'world').returns(true); var y = sinon.stub(); sinon.assert.calledWith(y, 'foo', 'bar');testDouble.js bietet nur eine Möglichkeit, den Stand-in aufzuräumen und zu testen:
. Die empfohlene Methode besteht darin, sie im sinon.test
Haken aufzurufen:
td.reset()
Dies vereinfacht das Einrichten des Test-Stand-in und die Reinigung nach dem Test und verringert die Möglichkeit schwerer Track-Fehler. afterEach
var x = td.function(); td.when(x('hello', 'world')).thenReturn(true); var y = td.function(); td.verify(y('foo', 'bar'));
Wir haben jetzt die Funktionalität dieser beiden Bibliotheken verstanden. Beide bieten ziemlich ähnliche Funktionen, aber sie haben unterschiedliche Designideen voneinander. Können wir es in Vor- und Nachteile unterteilen?
Sprechen wir zuerst über Sinon.js. Es bietet einige zusätzliche Funktionen als testDouble.js und einige Aspekte davon sind einfacher zu konfigurieren. Dies bietet eine höhere Flexibilität dafür in spezielleren Testszenarien. Sinon.js verwendet auch die Sprache von Menschen, die mit anderen Sprachen besser vertraut sind-Konzepte wie Spione, Stubs und Mocke existieren in verschiedenen Bibliotheken und wurden auch in testbezogenen Büchern diskutiert.
Der Nachteil ist, dass es die Komplexität erhöht. Während seine Flexibilität es Experten ermöglicht, mehr Dinge zu tun, bedeutet dies, dass bestimmte Aufgaben komplexer sind als in testDouble.js. Es kann auch eine steilere Lernkurve für die Neuen haben, um das Konzept eines Stellvertreters zu testen. Tatsächlich kann selbst jemand, der damit vertraut ist wie ich, schwer zu erklären, einige der Unterschiede zwischen
undim Detail zu erklären!
testDouble.js wählte eine einfachere Schnittstelle aus. Der größte Teil seines Inhalts ist ziemlich einfach und einfach zu bedienen und fühlt sich besser für JavaScript geeignet, während Sinon.js sich manchmal für andere Sprachen anfühlt. Dank dieser und einigen der Designprinzipien ist es für Anfänger einfacher, loszulegen, und selbst erfahrene Tester werden viele Aufgaben leichter zu erledigen. Beispielsweise verwendet TestDouble dieselbe API, um Test-Stand-Ins einzurichten und die Ergebnisse zu überprüfen. Aufgrund seines einfacheren Reinigungsmechanismus kann es auch weniger anfällig für Fehler sein.
testDouble Das größte Problem wird durch einige seiner Designprinzipien verursacht. Zum Beispiel kann ein völliger Mangel an Spione es einigen Menschen, die es vorziehen, Spione über Stubs zu verwenden, unmöglich machen. Dies ist größtenteils eine Frage der Meinung, und Sie finden das Problem möglicherweise überhaupt nicht. Außerdem ist es, obwohl testDouble.js eine aktualisierte Bibliothek ist, eine ernsthafte Konkurrenz für Sinon.js.
Vergleichen Sie nach Funktion
Folgendes ist ein Vergleich nach Funktion:
功能 | Sinon.js | testdouble.js |
---|---|---|
间谍 | 是 | 否 |
存根 | 是 | 是 |
延迟存根结果 | 否 | 是 |
模拟 | 是 | 是1 |
Promise 支持 | 是(在 2.0 中) | 是 |
时间辅助函数 | 是 | 是(通过插件) |
Ajax 辅助函数 | 是 | 否(改为替换函数) |
模块替换 | 否 | 是 |
内置断言 | 是 | 是 |
匹配器 | 是 | 是 |
自定义匹配器 | 是 | 是 |
参数捕获器 | 否2 | 是 |
代理测试替身 | 否 | 是 |
- testDouble.js technisch gesehen Es gibt keine solche Simulation in Sinon.js. Da die Simulation in Sinon im Wesentlichen ein Objekt ist, das Stubs und Validierung enthält, können ähnliche Effekte durch Verwendung von
td.replace(someObject)
erzielt werden. - kann ähnliche Effekte wie Parameter -Kapiturer erzielen, indem
stub.yield
(nicht mitstub.yields
verwechselt werden).
Zusammenfassung und Schlussfolgerung
sinon.js und testDouble.js liefern beide eine ziemlich ähnliche Funktionen. In dieser Hinsicht ist auch nicht offensichtlich überlegen.
Der größte Unterschied zwischen beiden ist ihre API. Sinon.js ist wahrscheinlich ein bisschen länger und bietet viele Möglichkeiten, wie man Dinge macht. Dies kann seine Vor- und Nachteile sein. testDouble.js hat eine schlankere API, die das Erlernen und Gebrauch erleichtert. Aufgrund seines willkürlicheren Designs finden einige jedoch problematisch.
, welches ist für mich geeignet?
Stimmen Sie den Designprinzipien von TestDouble zu? Wenn ja, dann gibt es keinen Grund, es nicht zu verwenden. Ich habe in vielen Projekten Sinon.js verwendet und kann mit Sicherheit sagen, dass testDouble.js mindestens 95% der Arbeiten, die ich in Sinon.js geleistet habe, und die verbleibenden 5% möglicherweise mit einer einfachen Problemumgehung erledigt werden.
Wenn Sie Sinon.js schwer zu bedienen finden oder nach einem "javaScript-Stil" -TestDouble.js suchen. Sogar Leute wie ich, die viel Zeit damit verbringen, Sinon zu verwenden, empfehle ich dazu, testDouble.js zu versuchen und zu sehen, ob es Ihnen gefällt.
Einige Aspekte von testDouble.js können jedoch Kopfschmerzen für Menschen mit Kenntnis von Sinon.js oder anderen erfahrenen Tester verursachen. Zum Beispiel kann das vollständige Mangel an Spione der entscheidende Faktor sein. Sinon.js ist immer noch eine gute Wahl für Experten und diejenigen, die die größte Flexibilität wünschen.
Wenn Sie mehr darüber erfahren möchten, wie Sie in der Praxis Test-Stand-Ins verwenden, lesen Sie meinen kostenlosen Sinon.js-Leitfaden. Während es Sinon.js verwendet, können Sie auch dieselben Techniken und Best Practices auf testDouble.js anwenden.
Gibt es Probleme? Kommentar? Verwenden Sie bereits testDouble.js? Würden Sie nach dem Lesen dieses Artikels in Betracht ziehen, es zu versuchen? Bitte lassen Sie es mich in den Kommentaren unten wissen.
Dieser Artikel wurde von James Wright, Joan Yin, Christian Johansen und Justin Searls überprüft. Vielen Dank an alle SitePoint -Peer -Rezensenten, die SidePoint -Inhalte für den Besten erhalten haben!
häufig gestellte Fragen zu JavaScript -Testwerkzeugen: Sinon.js vs. testDouble.js
Was ist der Hauptunterschied zwischen Sinon.js und testDouble.js?
sinon.js und testDouble.js sind beide beliebte JavaScript -Testbibliotheken, haben jedoch einige wichtige Unterschiede. Sinon.js ist bekannt für sein reiches Merkmalssatz, einschließlich Spione, Stubs und Simulationen sowie Dienstprogramme zur Emulierung von Timern und XHR. Es ist ein vielseitiges Tool, das in Verbindung mit jedem Test -Framework verwendet werden kann. Auf der anderen Seite ist TestDouble.js eine minimalistische Bibliothek, die sich auf die Bereitstellung einer einfachen und intuitiven API zum Testen von Stand-Ins konzentriert, die Alternativen zu den zu testenden Teilen des Systems sind. Es enthält keine Versorgungsunternehmen für die Emulierung von Timern oder XHRs, aber es ist so konzipiert, dass es einfach zu bedienen und zu verstehen ist. Es ist daher eine großartige Option für diejenigen, die eine schlankere Testmethode bevorzugen.
Wie installiere ich Sinon.js und testDouble.js?
sinon.js und testDouble.js können über NPM (Node.js Paket Manager) installiert werden. Für Sinon.js können Sie den Befehl npm install sinon
verwenden. Für testDouble.js ist der Befehl npm install testdouble
. Nach der Installation können Sie const sinon = require('sinon')
und const td = require('testdouble')
verwenden, um sie in Ihre Testdateien einzuführen.
Kann ich gleichzeitig Sinon.js und testDouble.js verwenden?
Ja, Sinon.js und testDouble.js können gleichzeitig im selben Projekt verwendet werden. Sie sind alle so konzipiert, dass sie sehr ordentlich einfach sind und gut mit anderen Bibliotheken zusammenarbeiten. Denken Sie jedoch daran, dass sie überlappende Merkmale haben. Daher kann die gleichzeitige Verwendung zu Verwirrung führen. Es wird normalerweise empfohlen, einen von ihnen basierend auf Ihren spezifischen Bedürfnissen und Vorlieben auszuwählen.
Wie erstellt man einen Spion mit Sinon.js und testDouble.js?
In Sinon.js können Sie sinon.spy()
zum Erstellen von Spione verwenden. Diese Funktion gibt ein Spionageobjekt zurück, das alle darauf erhobenen Anrufe aufgezeichnet hat, einschließlich Parametern, Rückgabewerte und Ausnahmen. In testDouble.js können Sie Spione mit td.function()
erstellen. Diese Funktion gibt eine Test-Stand-Alone-Funktion zurück, die alle Aufrufe, einschließlich Parameter, aufzeichnet.
Wie erstellt man Stubs mit Sinon.js und testDouble.js?
In Sinon.js können Sie Stubs mit sinon.stub()
erstellen. Diese Funktion gibt ein Stub -Objekt zurück, das sich wie ein Spion verhält, ermöglicht es Ihnen jedoch auch, sein Verhalten zu definieren, z. In testDouble.js können Sie Stubs mit td.when()
erstellen. Mit dieser Funktion können Sie Ihr Verhalten beim Aufrufen eines Teststandby mit einem bestimmten Parameter definieren.
Wie kann man Sinon.js und testDouble.js verwenden, um Spione oder Stubs zu überprüfen?
In Sinon.js können Sie Methoden wie spy.called
, spy.calledWith()
und spy.returned()
verwenden, um Spione oder Stubs zu überprüfen. In testDouble.js können Sie td.verify()
verwenden, um zu behaupten, ob der Teststandby in irgendeiner Weise aufgerufen wird.
Was sind die Vorteile der Verwendung von Sinon.js anstelle von testDouble.js?
sinon.js hat im Vergleich zu TestDouble.js einen umfassenderen Merkmalssatz. Es enthält Dienstprogramme zum Nachahmung von Timern und XHR, was sehr nützlich ist, um bestimmte Codestypen zu testen. Es wird auch breiter genutzt und verfügt über eine größere Gemeinschaft, was bedeutet, dass mehr Ressourcen und Unterstützung erhalten werden können.
Was sind die Vorteile der Verwendung von TestDouble.js anstelle von Sinon.js?
testDouble.js hat eine einfachere und intuitivere API als Sinon.js. Es ist so konzipiert, dass es einfach zu bedienen und zu verstehen ist, daher ist es eine gute Wahl für diejenigen, die eine optimiertere Testmethode bevorzugen. Es fördert auch gute Testpraktiken, indem es es schwierig macht, Test-Tests zu missbrauchen.
Kann ich Sinon.js und testDouble.js mit anderen Testrahmen verwenden?
Ja, Sinon.js und testDouble.js sind beide sehr ordentlich entwickelt und funktionieren gut mit anderen Test -Frameworks. Sie können mit jedem JavaScript-fähigen Test-Framework verwendet werden.
Welche Ressourcen gibt es, um mehr über Sinon.js und testDouble.js zu erfahren?
Ja, Sinon.js und testDouble.js haben viele Unterlagen auf ihren offiziellen Websites. Es gibt auch viele Tutorials, Blog-Beiträge und Online-Kurse, die aus diesen Bibliotheken umfassende Inhalte abdecken.
Das obige ist der detaillierte Inhalt vonJavaScript -Test -Tool Showdown: Sinon.js vs testDouble.js. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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.

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 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.

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.

Die Verschiebung von C/C zu JavaScript erfordert die Anpassung an dynamische Typisierung, Müllsammlung und asynchrone Programmierung. 1) C/C ist eine statisch typisierte Sprache, die eine manuelle Speicherverwaltung erfordert, während JavaScript dynamisch eingegeben und die Müllsammlung automatisch verarbeitet wird. 2) C/C muss in den Maschinencode kompiliert werden, während JavaScript eine interpretierte Sprache ist. 3) JavaScript führt Konzepte wie Verschlüsse, Prototypketten und Versprechen ein, die die Flexibilität und asynchrone Programmierfunktionen verbessern.

Unterschiedliche JavaScript -Motoren haben unterschiedliche Auswirkungen beim Analysieren und Ausführen von JavaScript -Code, da sich die Implementierungsprinzipien und Optimierungsstrategien jeder Engine unterscheiden. 1. Lexikalanalyse: Quellcode in die lexikalische Einheit umwandeln. 2. Grammatikanalyse: Erzeugen Sie einen abstrakten Syntaxbaum. 3. Optimierung und Kompilierung: Generieren Sie den Maschinencode über den JIT -Compiler. 4. Führen Sie aus: Führen Sie den Maschinencode aus. V8 Engine optimiert durch sofortige Kompilierung und versteckte Klasse.

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

VSCode Windows 64-Bit-Download
Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

WebStorm-Mac-Version
Nützliche JavaScript-Entwicklungstools

SublimeText3 Linux neue Version
SublimeText3 Linux neueste Version