unit testing - mocks - ¿Cómo uso Sinon con Typescript?
sinon stub example (2)
Es posible que necesite usar una aseveración de tipo <any>
para hacer que el tipo sea ancho antes de limitarlo a su tipo específico:
var myServiceMock: MyStuff.MyService =
<MyStuff.MyService> <any> (sinon.mock(MyStuff.MyService));
Solo para aclarar un comportamiento de sinon, aunque pase MyStuff.MyService
, lo que pase al método mock
solo se usa para proporcionar mejores mensajes de error.
Si desea que el simulacro tenga métodos y propiedades, debe agregarlos .
Si desea crear falsificaciones creadas automáticamente, puede FakeFactory
la FakeFactory
de tsUnit , que crea una versión falsa con algunos valores predeterminados que puede optar por anular. asegúrese de que está probando el comportamiento en lugar de la implementación).
Ejemplo de uso de FakeFactory
:
var target = tsUnit.FakeFactory.getFake<RealClass>(RealClass);
var result = target.run();
this.areIdentical(undefined, result);
Si uso sinon con mecanografía, ¿cómo puedo convertir el simulador de sinon en una instancia de mi objeto?
Por ejemplo, se devolvería un SinonMock pero mi controlador bajo prueba puede requerir que se le pase un servicio específico a su constructor.
var myServiceMock: MyStuff.MyService = <MyStuff.MyService (sinon.mock(MyStuff.MyService));
controllerUnderTest = new MyStuff.MyController(myServiceMock, $log);
¿Se puede usar sinon con Typescript?
Sinon puede crear un código auxiliar basado en un constructor con bastante facilidad si, en lugar de mock
, utiliza el método createStubInstance
.
Un ejemplo usando mocha , chai , sinon y sinon-chai , podría verse así:
import * as sinon from ''sinon'';
import * as chai from ''chai'';
// ... imports for the classes under test
const expect = chai.expect;
const sinonChai = require("sinon-chai");
chai.use(sinonChai);
describe(''MyController'', () => {
it(''uses MyService'', () => {
let myService = sinon.createStubInstance(MyStuff.MyService),
controller = new MyStuff.MyController(myService as any, ...);
// ... perform an action on the controller
// that calls myService.aMethodWeAreInterestedIn
// verify if the method you''re interested in has been called if you want to
expect(myService.aMethodWeAreInterestedIn).to.have.been.called;
});
});
He publicado un artículo , que le puede resultar útil si desea obtener más información sobre las diferentes pruebas de duplicación y cómo usarlas con Sinon.js.
¡Espero que esto ayude!
ene