Heim >Web-Frontend >js-Tutorial >JavaScript -Test -Tool Showdown: Sinon.js vs testDouble.js

JavaScript -Test -Tool Showdown: Sinon.js vs testDouble.js

Lisa Kudrow
Lisa KudrowOriginal
2025-02-16 11:29:09950Durchsuche

JavaScript Testing Tool Showdown: Sinon.js vs testdouble.js

JavaScript Testing Tool Showdown: Sinon.js vs testdouble.js

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:

<code class="language-javascript">// 以下是查看函数调用的参数的方法:
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();</code>

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:

<code class="language-javascript">// 以下是查看函数调用的参数的方法:
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();</code>

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:

<code class="language-javascript">var x = sinon.stub();</code>

und

<code class="language-javascript">var x = td.function();</code>

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:

<code class="language-javascript">// 我们也可以为测试替身命名
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
}
*/</code>

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

<code class="language-javascript">var x = sinon.stub();
x.withArgs('hello', 'world').returns(true);

var y = sinon.stub();
sinon.assert.calledWith(y, 'foo', 'bar');</code>

und

<code class="language-javascript">var x = td.function();
td.when(x('hello', 'world')).thenReturn(true);

var y = td.function();
td.verify(y('foo', 'bar'));</code>

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:

leicht zu erreichen ist
<code class="language-javascript">var spy = sinon.spy();

myAsyncFunction(spy);

sinon.assert.calledOnce(spy);</code>

und

<code class="language-javascript">var spy = td.function();

myAsyncFunction(spy);

td.verify(spy());</code>

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:
<code class="language-javascript">var stub = sinon.stub();
stub.withArgs('hello').returns('foo');

console.log(stub('hello', 'world')); // 输出:'foo'

sinon.assert.calledWith(stub, 'hello'); // 没有错误</code>

und
<code class="language-javascript">// 以下是查看函数调用的参数的方法:
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();</code>

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:

<code class="language-javascript">// 以下是查看函数调用的参数的方法:
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();</code>

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.

<code class="language-javascript">var x = sinon.stub();</code>

und

<code class="language-javascript">var x = td.function();</code>

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.

<code class="language-javascript">// 我们也可以为测试替身命名
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
}
*/</code>
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:

<code class="language-javascript">var x = sinon.stub();
x.withArgs('hello', 'world').returns(true);

var y = sinon.stub();
sinon.assert.calledWith(y, 'foo', 'bar');</code>
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

<code class="language-javascript">var x = td.function();
td.when(x('hello', 'world')).thenReturn(true);

var y = td.function();
td.verify(y('foo', 'bar'));</code>
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

Mit Sinon können Sie auch das Verhalten ändern:

<code class="language-javascript">var spy = sinon.spy();

myAsyncFunction(spy);

sinon.assert.calledOnce(spy);</code>
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

Was ist, wenn wir

zwei Rückrufe mit bestimmten Werten aufrufen möchten?

<code class="language-javascript">var spy = td.function();

myAsyncFunction(spy);

td.verify(spy());</code>
Mit Sinon ist das einfach unmöglich. Sie können mehrere Anrufe mit

verknüpfen, aber es wird nur einen von ihnen anrufen. callsArgWith

testDouble.js hat ein integriertes Modulersatz

Zusätzlich zur Ersetzung von Funktionen durch

ermöglicht TestDouble auch das gesamte Modul. td.replace

Dies ist hauptsächlich nützlich, wenn Sie ein Modul haben, das die Funktionen, die ersetzt werden müssen, direkt exportiert:

<code class="language-javascript">var stub = sinon.stub();
stub.withArgs('hello').returns('foo');

console.log(stub('hello', 'world')); // 输出:'foo'

sinon.assert.calledWith(stub, 'hello'); // 没有错误</code>
Wenn wir es durch TestDouble ersetzen möchten, können wir beispielsweise

verwenden ... td.replace('path/to/file')

<code class="language-javascript">// 以下是查看函数调用的参数的方法:
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();</code>

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.

<code class="language-javascript">// 以下是查看函数调用的参数的方法:
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();</code>

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

Es ist einfacher, den Testinhalt mit testDouble.js
<code class="language-javascript">var x = sinon.stub();</code>
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:

<code class="language-javascript">var x = td.function();</code>
oder:

<code class="language-javascript">// 我们也可以为测试替身命名
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
}
*/</code>
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.

<code class="language-javascript">var x = sinon.stub();
x.withArgs('hello', 'world').returns(true);

var y = sinon.stub();
sinon.assert.calledWith(y, 'foo', 'bar');</code>
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

Pros and Cons
<code class="language-javascript">var x = td.function();
td.when(x('hello', 'world')).thenReturn(true);

var y = td.function();
td.verify(y('foo', 'bar'));</code>

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

und

im 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
代理测试替身
  1. 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.
  2. kann ähnliche Effekte wie Parameter -Kapiturer erzielen, indem stub.yield (nicht mit stub.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!

Stellungnahme:
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