2016-08-20 5 views
1

Ich habe folgendes Beispiel Klasse:stubbing Sinon eine Funktion als Parameter übergeben

function Example() {...} 
Example.prototype.someFunc1() {...} 
Example.prototype.someFunc2() {...} 
Example.prototype.func(func) {var res = func(); ...} 

I Example#func() in der Regel rufen Sie wie folgt vor:

var example = new Example(); 
example.func(example.someFunc1) 
// or like this, depending on what I want 
example.func(example.someFunc2) 

Jetzt Stummel ich Example#someFunc1() wie in meinem Test folgt:

var example = new Example(); 
sinon.stub(example, 'someFunc1').returns(...); 
exmaple.func(example.someFunc1); 

Problem ist, dass Example#someFunc1() nicht bein ist g stubbed auf diese Weise und normalerweise aufgerufen werden. Was kann ich in einer solchen Situation tun?

+0

Ich kann das nicht reproduzieren; https://gist.github.com/davelnewton/a2b786fd485b6767606bcb20942c4616 –

+0

@DaveNewton Ich machte eine Geige: https://jsfiddle.net/f7p7z5fL/ – Jorayen

Antwort

1

In Ihrem Beispiel speichern Sie einen Verweis auf die Funktion. Dann stubst du es ab.

Sie übergeben einen Verweis auf die ursprüngliche Funktion, nicht die Stub-Funktion.

Die Funktion Sie Stub nicht verschwinden, wenn Sie es stub – das ist, warum Sie können restore() es später. Sie müssen entweder einen Verweis zu übergeben ist selbst Funktion Objekt, zum Beispiel

sinon.stub(example, 'opt1').returns(42); 
example.logic([3, 2], example.opt1); 

Oder einen Verweis auf den Stummel passieren, zB

var fn = sinon.stub(example, 'opt1').returns(42); 
example.logic([3, 2], fn); 

Das letztere ist wirklich keinen Sinn als Test machen obwohl, Sie könnten einfach irgendeine Funktion übergeben, es gibt keinen Grund, etwas zu stümpfen.

FWIW, Ihre Geige entspricht nicht annähernd dem ursprünglichen Code, den Sie gepostet haben.


Es ist unklar, was Sie zu Test versuchen: Sie haben eine Funktionsreferenz – passieren diese jede alte Funktion sein könnte, ob es mit dem Example Objekt angebracht ist, zum Beispiel würde eine anonyme Funktion in Ordnung sein.

Wenn die Funktion selbst die Stubbed-Funktion genannt wird, macht Stubbing Sinn.

+0

Ja, ich wusste nicht, was ich dachte, ich wollte nur Unit-Test #logic() und isoliere es, also drückte ich es aus, ich hätte einfach jeden Stub übergeben sollen, wie du gesagt hast .. danke :) – Jorayen

Verwandte Themen