2016-05-26 10 views
1

Grundsätzlich möchte ich Funktionen patch, die eine andere Funktion ruft, damit ich bestätigen kann, dass sie aufgerufen wurden. Ist das in js möglich? (Ich verwende Mocha/Chai/Sinon zum Testen).Patch/Mock-Funktion in einer anderen Funktion zum Testen in Javascript

Eine vereinfachte Version von dem, was ich tun möchte:

// in render.js 
export helper = function() {} 
export default = function() { 
    helper() 
} 

// in the render-test.js 
import render, { helper } from 'render' 
// what I'd like to to: 
helper = sinon.spy() 
render() 
assert(helper.called, true) 

Antwort

3

Es ist möglich, aber es hat einige Neuschreiben erfordern, vor allem die Art und Weise Sie helper in render.js sind aufgerufen wird.

Hier ist ein Beispiel, das funktioniert:

// render.js 
export function helper() {} 
export default function() { 
    exports.helper() 
} 

// render-test.js 
import render, * as renderFuncs from 'render' 
... 
sinon.spy(renderFuncs, 'helper'); 
render() 
assert(renderFuncs.helper.called) 

Der Grund, warum Sie benötigen, ist helper()exports.helper() statt nur zu nennen, weil dieser ein lokalen Bezug auf die helper Funktion ist, die Sie nicht aus zugreifen können die Testdatei.

Das exports Objekt ist zugänglich von der Testdatei (es der Name renderFuncs gegeben hat), so Sinon den Verweis auf helper und es mit einem Spion wickeln ändern können.