unitarios test mock example javascript node.js sinon

javascript - test - sinon-chai



Copiando un método de clase con Sinon.js (4)

Gracias a @loganfsmyth por la propina. Pude hacer que el código auxiliar funcionara en un método de clase Ember como este:

sinon.stub(Foo.prototype.constructor, ''find'').returns([foo, foo]); expect(Foo.find()).to.have.length(2)

Estoy intentando resguardar un método usando sinon.js pero obtengo el siguiente error:

Uncaught TypeError: Attempted to wrap undefined property sample_pressure as function

También fui a esta pregunta ( Stubbing y / o burla de una clase en sinon.js? ) Y copié y pegué el código, pero recibo el mismo error.

Aquí está mi código:

Sensor = (function() { // A simple Sensor class // Constructor function Sensor(pressure) { this.pressure = pressure; } Sensor.prototype.sample_pressure = function() { return this.pressure; }; return Sensor; })(); // Doesn''t work var stub_sens = sinon.stub(Sensor, "sample_pressure").returns(0); // Doesn''t work var stub_sens = sinon.stub(Sensor, "sample_pressure", function() {return 0}); // Never gets this far console.log(stub_sens.sample_pressure());

Aquí está el jsFiddle ( http://jsfiddle.net/pebreo/wyg5f/5/ ) para el código anterior, y el jsFiddle para la pregunta SO que mencioné ( http://jsfiddle.net/pebreo/9mK5d/1/ )

Me aseguré de incluir sinon en los recursos externos en jsFiddle e incluso en jQuery 1.9. ¿Qué estoy haciendo mal?


La respuesta principal está en desuso. Ahora deberías usar:

sinon.stub(YourClass.prototype, ''myMethod'').callsFake(() => { return {} })

O para métodos estáticos:

sinon.stub(YourClass, ''myStaticMethod'').callsFake(() => { return {} })

O para casos simples simplemente use devoluciones:

sinon.stub(YourClass.prototype, ''myMethod'').returns({}) sinon.stub(YourClass, ''myStaticMethod'').returns({})

O si desea un método para una instancia:

const yourClassInstance = new YourClass(); sinon.stub(yourClassInstance, ''myMethod'').returns({})


Me encontré con el mismo error al intentar simular un método de una clase de CoffeeScript utilizando Sinon.

Dada una clase como esta:

class MyClass myMethod: -> # do stuff ...

Puede reemplazar su método con un espía de esta manera:

mySpy = sinon.spy(MyClass.prototype, "myMethod") # ... assert.ok(mySpy.called)

Simplemente reemplace spy con stub o mock según sea necesario.

Tenga en cuenta que deberá reemplazar assert.ok con cualquier aserción que tenga su marco de prueba.


Su código está intentando colgar una función en Sensor , pero ha definido la función en Sensor.prototype .

sinon.stub(Sensor, "sample_pressure", function() {return 0})

es esencialmente lo mismo que esto:

Sensor["sample_pressure"] = function() {return 0};

pero es lo suficientemente inteligente como para ver que Sensor["sample_pressure"] no existe.

Entonces, lo que querrías hacer es algo como esto:

// Stub the prototype''s function so that there is a spy on any new instance // of Sensor that is created. Kind of overkill. sinon.stub(Sensor.prototype, "sample_pressure").returns(0); var sensor = new Sensor(); console.log(sensor.sample_pressure());

o

// Stub the function on a single instance of ''Sensor''. var sensor = new Sensor(); sinon.stub(sensor, "sample_pressure").returns(0); console.log(sensor.sample_pressure());

o

// Create a whole fake instance of ''Sensor'' with none of the class''s logic. var sensor = sinon.createStubInstance(Sensor); console.log(sensor.sample_pressure());