Sinon: Benannte Spione

Erstellt am 25. Feb. 2013  ·  13Kommentare  ·  Quelle: sinonjs/sinon

Es würde die Lesbarkeit von Assertionsfehlermeldungen verbessern, wenn Spione (mit Ausnahme der Objekteigenschaften) mit Namen erstellt werden könnten. Zum Beispiel erlauben Jasminspione dies.

Help wanted

Hilfreichster Kommentar

Ich sehe das; Es heißt immer, der Name sei proxy - aber wenn i Object.defineProperty(spy, 'name', { value: 'new name' }) dann wird "neuer Name" gemeldet.

Es wäre großartig, dies wieder zu öffnen.

Alle 13 Kommentare

Sinon überprüft den umschlossenen Funktionsnamen. Sie können den Spion also benennen, indem Sie eine leere benannte Funktion einschließen.

var spy = sinon.spy(function doStuff() {});

Mit dieser Technik können Sie auch eine Funktion mit einer bestimmten Länge erstellen:

var spy = sinon.spy(function doStuff(a, b, c) {}); // spy.length === 3

Soweit ich sehen kann, ist es immer "Proxy" als Funktionsname. Sind Sie sicher, dass dieser Kommentar wahr ist?

Soweit ich sehen kann, ist es immer "Proxy" als Funktionsname. Sind Sie sicher, dass dieser Kommentar wahr ist?

Würde es Ihnen etwas ausmachen, ein lauffähiges Beispiel zu veröffentlichen?

// test/index.js
var sinon = require('sinon');

var spy = sinon.spy(function doStuff() {
    console.log('Name: ' + spy.name);
});

spy();
➜  sinon-test node test/index.js 
Name: proxy

Ich kann mich nicht erinnern, was ich zuvor getan habe, aber ich habe Mocha-Ausgabe von fehlgeschlagenen Tests erhalten, bei denen der Funktionsname "Proxy" war und Sie nicht wissen würden, dass es "doStuff" war. Wenn ich mich erinnern kann, was genau es war, werde ich posten

Ich sehe das; Es heißt immer, der Name sei proxy - aber wenn i Object.defineProperty(spy, 'name', { value: 'new name' }) dann wird "neuer Name" gemeldet.

Es wäre großartig, dies wieder zu öffnen.

Ich habe dies durch Folgendes umgangen:

const mapMethod = sinon.spy(Array.prototype, 'map');
const methodName = map.wrappedMethod.name;
console.log(methodName); // 'map'

@Tbhesswebber , das nicht funktioniert, wenn Nicht-

Ah ... ausgezeichneter Punkt. Ich arbeite an Lehrplänen für das Unterrichten von Funktionen höherer Ordnung (mit Array.prototype als Ausgangspunkt), was mich zu diesem Thema geführt hat. Ganz anderer Anwendungsfall!

PS - Das Testen von Implementierungsdetails ist wirklich mühsam, wenn Sie es tatsächlich versuchen!

Ich kann sehen, wie nützlich das wäre. Wenn jemand tiefer in dieses Thema eintauchen möchte, wäre das cool.

Möglicherweise gibt es Funktionen oder Tests, die vom Namen der zurückgegebenen Funktion abhängen. Wenn dies der Fall ist, sollten wir diskutieren, wie wir es umgehen können.

@mroderick Wenn Sie einen Spion mit einem Original erstellen, sollte Object.defineProperty(spy, 'name', { configurable: true, value: spy.wrappedMethod.name }) das tun?

Ich denke, dies war eine Funktion, die wir hatten - den Spion zu benennen, indem wir der Funktion einen Namen gaben - ich schätze, sie ging unterwegs verloren. Ich bin mit dem Vorschlag einverstanden, ihn explizit zu benennen. Aber sollten wir nicht auch den „Proxy“ -Namen ändern? Ich bin der Meinung, dass eine Spionagefunktion so nah wie möglich an der ursprünglichen Funktion aussehen sollte. Wir sorgen für die richtige Arität, aber wir ändern jetzt den Namen. Scheint falsch.

Ich habe gerade festgestellt, dass die API auch spy.named(name) enthält. Sets Damit wird eine displayName -Eigenschaft für den Spion festgelegt. Es sollte auch den Funktionsnamen ändern, denke ich. Schauen Sie sich das jetzt an.

Der Patch von # 1987 wurde in v7.2.7 . Bitte teilen Sie uns mit, ob dies für alle zufriedenstellend ist ❤️

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen