How do I use Sinon with Typescript?
如果我将sinon与typescript一起使用,那么如何将sinon模拟转换为对象的实例?
例如,将返回SinonMock,但我的受测控制器可能需要将特定服务传递给其构造函数。
1 2 3 | var myServiceMock: MyStuff.MyService = <MyStuff.MyService (sinon.mock(MyStuff.MyService)); controllerUnderTest = new MyStuff.MyController(myServiceMock, $log); |
sinon可以与Typescript一起使用吗?
如果您使用
使用mocha,chai,sinon和sinon-chai的示例可能如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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; }); }); |
我已经发表了一篇文章,如果您想了解更多有关不同的测试双打以及如何将它们与Sinon.js一起使用的信息,可能会发现很有用。
希望这可以帮助!
一月
您可能需要使用
1 2 | var myServiceMock: MyStuff.MyService = <MyStuff.MyService> (sinon.mock(MyStuff.MyService)); |
只是为了阐明sinon的一种行为-尽管您传入了
如果要让模拟具有方法和属性,则需要添加它们。
如果您要自动创建伪造品,可以从tsUnit中获取
1 2 3 | var target = tsUnit.FakeFactory.getFake<RealClass>(RealClass); var result = target.run(); this.areIdentical(undefined, result); |
在Typescript中,可以通过使用sinon.createStubInstance和SinonStubbedInstance类来实现。
例:
1 2 3 | let documentRepository: SinonStubbedInstance<DocumentRepository>; documentRepository = sinon.createStubInstance(DocumentRepository); |
现在,您具有使用此类的所有已存根方法的完整的智能感知。
示例安排:
1 2 3 | documentRepository.delete.resolves({deletedCount: 1}); documentRepository.update.throws(error); |
断言示例:
1 | sinon.assert.calledOnce(documentRepository.update); |
只有一个地方需要执行类型转换,这就是要进行单元测试的类的初始化。
例:
1 2 3 4 | documentsController = new DocumentsController( userContext, documentRepository as unknown as DocumentRepository); |
希望这会有所帮助。
有关本文的更多信息。
使用ts-sinon。
它可以让您:
- 存根对象
- 存根接口