Cómo espiar una función exportada por defecto

sinon.spy toma 2 parámetros, objeto y nombre de función.

Tengo un módulo como se indica a continuación:

module.exports = function xyz() { }

¿Cómo defino un espía para xyz ? No tengo nombre de objeto para usar.

¿Pensamientos?

sinon#spy también acepta un solo argumento myFunc . De la documentación del sinon :

var spy = sinon.spy(myFunc);

Espías en la función proporcionada.

Así que podemos usarlo así:

 var xyz = require('./xyz'); sinon.spy(xyz); 

Lo anterior en realidad no funciona si está usando la funcionalidad de importación de módulos ES6. Si es así, he descubierto que puede espiar los valores predeterminados de esa manera.

 // your file export default function () {console.log('something here');} // your test import * as someFunction from './someFunction'; spyOn(someFunction, 'default') 

Como se indica en http://2ality.com/2014/09/es6-modules-final.html

La exportación predeterminada es en realidad solo una exportación con nombre con el nombre especial predeterminado

Entonces, la importación * como someFunction le da acceso a todo el objeto module.exports, lo que le permite espiar el valor predeterminado.