Bezieht sich Ihre Funktionsanforderung auf ein Problem?
Aus der Dokumentation geht nicht hervor, was eine Fälschung kann und was nicht.
Beschreiben Sie die gewünschte Lösung
Genaue Methoden, die einem Fake zur Verfügung stehen, müssen dokumentiert werden.
Zunächst einmal vielen Dank für Sinon. Ich glaube, die Bibliothek ist leistungsstark und hat mir geholfen, viele Tests zu schreiben. Was ich hier fordere, ist, dass Fälschungen ihre Dokumentation verbessern müssen. Hier ist ein Beispiel für etwas, mit dem ich zu kämpfen hatte.
Der erste Satz der Fakes-Dokumentation lautet:
fake wurde mit Sinon mit v5 eingeführt. Es vereinfacht und verschmilzt Konzepte von Spionen und Stubs.
Das Wort "Zusammenführen" ist hier zu lose definiert, um zu wissen, wie die API einer Fälschung aussieht. Mein Fazit ist, dass Fälschungen eine API mit Spies zu teilen scheinen, mit einem zusätzlichen Stubbing-Verhalten ähnlich wie bei Stubs. Ich bin zu diesem Schluss gekommen, weil es den Anschein hat, dass das gefälschte Objekt die Eigenschaft called
wie es ein Spion tut (kann dies nur in der Spionagedokumentation dokumentiert finden) und withArgs
, die normalerweise verfügbar ist zu Stubs, scheint aber für Fälschungen nicht verfügbar zu sein.
Fälschungen brauchen definitiv bessere Dokumente. Vielleicht etwas, das im vorgeschlagenen (noch unentschlossenen, @mroderick?) Oktober-Hackathon angesprochen werden soll?
@ fatso83 Ich würde das gerne mal
Würde ich die Datei https://github.com/sinonjs/sinon/blob/master/docs/release-source/release/fakes.md aktualisieren?
Ist es auch der Umfang dieser Ausgabe, zu definieren, welche Funktionen für ein Scheinobjekt verfügbar sind, möglicherweise eine Verknüpfung mit der Spionage- und Stub-Dokumentation?
@ Peterjgrainger Das ist großartig! Der Umfang und dieser Ansatz scheinen vernünftig ...
Wenn man sich die Code-Fälschungen ansieht, scheint es dieselbe API wie bei einem Spion zu geben und nichts von einem Stub.
Schlagen Sie vor, die Dokumente zu aktualisieren, um den Verweis auf Stubs zu entfernen, da dies etwas irreführend ist, und hinzuzufügen, dass die API von Fälschungen mit der eines Spions identisch ist
Schrei 😮 wenn das nicht richtig aussieht.
@peterjgrainger Danke, dass spy
, und stub
zB fakes.throws()
ist dasselbe wie stub().throws()
@ mshaaban0 danke für die Eingabe. Ich werde genauer hinsehen
@ fatso83 @ mshaaban0 Ich glaube, ich habe den Umfang falsch verstanden.
Ich dachte, dieses Ticket deckt die Dokumentation der gefälschten Funktion ab, z
var fake = sinon.fake();
nicht direkt auf der Fälschung selbst dh
sinon.fake
Soweit ich sehen kann, gibt sinon.fake()
ein spy
Ich denke, dieser Teil der Dokumentation muss geklärt werden, da der Reporter eher nach Dokumentation zum Objekt als nach den statischen Funktionen fragt.
Ich bin zu diesem Schluss gekommen, weil es den Anschein hat, dass das gefälschte Objekt die Eigenschaft
called
wie es ein Spion tut (kann dies nur in der Spionagedokumentation dokumentiert finden)
@itmayziii scheint sich eher auf sinon.fake()
als auf sinon.fake
zu beziehen
Ich glaube ich verstehe was ich jetzt tun soll. Ändern Sie die aktuelle Dokumentation, um festzustellen, welche statischen Funktionen von einem Spion und welche von einem Stub inspiriert sind, und ändern Sie den Wortlaut merged
, um den Methodenmix besser zu beschreiben, und versuchen Sie herauszufinden, wie Sie zwischen sinon.fake
und sinon.fake()
Sie sind nicht der einzige, der den Umfang falsch versteht. Ich bin froh, dass du es für uns geklärt hast 😄
Dieses Problem wurde automatisch als veraltet markiert, da es in letzter Zeit keine Aktivitäten gab. Es wird geschlossen, wenn keine weitere Aktivität stattfindet. Vielen Dank für Ihre Beiträge.
Ich glaube ich verstehe was ich jetzt tun soll. Ändern Sie die aktuelle Dokumentation, um zu sagen, welche statischen Funktionen von einem Spion und welche von einem Stub inspiriert sind, und ändern Sie den zusammengeführten Wortlaut, um den Methodenmix besser zu beschreiben. Versuchen Sie auch herauszufinden, wie Sie zwischen sinon.fake und sinon.fake unterscheiden können ( )
Was ist in dieser Ausgabe zu tun? Wenn jemand es klarer macht, möchte ich einen Beitrag leisten.
Da es einen Abschnitt namens Instance properties
, müssen meines Erachtens nur Methoden einer gefälschten Funktion erklärt werden. Wenn es für eine gefälschte Funktion keine anderen Methoden als Spionagemethoden gibt, gibt es meines Erachtens keinen Grund, die aktuellen Dokumente zu überarbeiten.
Danke 😊
@srknzl TBH, ich erinnere mich nicht so gut, aber dies sind einige Punkte, die verbessert werden könnten:
sinon.fake
vollständig istcallCount
und andere Statistiken) 3. Eine gefälschte Instanz hat die API eines Spions (_ist ein_ gefälschter Spion, @mroderick?)Die Fakes-API ist eine Alternative zur Stubs and Spies-API, die alle diese Verwendungen vollständig ersetzen kann
Obwohl dies zutrifft, denke ich, dass es einfacher ist, einen Spion anstelle eines Fake + Replace-Anrufs zu verwenden. Kann man etwas dagegen tun?
const foo = {bar: () => {}};
const aSpy = sinon.spy(foo, 'bar');
foo.bar();
console.log(aSpy.called); // true
vs.
const foo = {bar: () => {}};
const barFake = sinon.fake(foo.bar);
sinon.replace(foo, 'bar', barFake);
foo.bar();
console.log(barFake.called); // true
Wenn es so einfach wäre wie Spione, wären Fälschungen die einzigen, die ich verwenden werde.
Bearbeiten:
Ich habe herausgefunden, dass ich das kann:
const foo = {bar: () => {}};
sinon.replace(foo, 'bar', sinon.fake(foo.bar));
foo.bar();
console.log(foo.bar.called); // true
Es könnte sich auch lohnen, diese Verwendung zu dokumentieren.
@srknzl Ich bin nicht sicher, ob der Ersetzungsaufruf etwas zurückgibt, aber er könnte möglicherweise die Fälschung zurückgeben. Das würde es ein bisschen glatter machen.
Gerade verifiziert:
f = sinon.fake();
val=sinon.replace(o, 'b', f)
assert.equal(f,val);
Das heißt, Sie können dies schreiben:
const foo = {bar: () => {}};
const fake = sinon.replace(foo, 'bar', sinon.fake());
foo.bar();
console.log(fake.calledOnce); // true
ja, macht Sinn. Außerdem gibt replace () seinen Rückgabewert nicht auf der Sandbox-Seite an
Machen Sie einfach klar, welche Versionen sich ändern sollten? Alle Versionen, die gefälscht haben, richtig? Oder nur die nächste Version?
Ein weiteres Feedback zur Dokumentation im Allgemeinen:
Ich kann verstehen, dass grüne Links sind, aber einige nicht grüne sind auch Links, wie sinon.replace*
, sinon.spy
und sinon.stub
. Es wäre besser, sie irgendwie anders zu machen
Der erste PR befindet sich unter https://github.com/sinonjs/sinon/pull/2360 .
Ich warte auf Ihr Feedback.