TypeScriptでsinonを使用している場合、sinonモックをオブジェクトのインスタンスにキャストするにはどうすればよいですか?
たとえば、SinonMockが返されますが、テスト対象のコントローラーでは、コンストラクターに渡される特定のサービスが必要になる場合があります。
var myServiceMock: MyStuff.MyService = <MyStuff.MyService (sinon.mock(MyStuff.MyService));
controllerUnderTest = new MyStuff.MyController(myServiceMock, $log);
Typeonでsinonを使用できますか?
特定の型に絞り込む前に、<any>
型アサーションを使用して型を広くする必要がある場合があります。
var myServiceMock: MyStuff.MyService =
<MyStuff.MyService> <any> (sinon.mock(MyStuff.MyService));
Sinonの1つの動作を明確にするために-MyStuff.MyService
を渡しますが、mock
メソッドに渡すものはすべて、より良いエラーメッセージを提供するためにのみ使用されます。
モックにメソッドとプロパティを持たせたい場合、 追加する必要があります 。
自動的に作成された偽物が必要な場合は、 tsUnit からFakeFactory
を取得できます。これにより、オーバーライドすることを選択できるいくつかのデフォルト値を持つ偽物バージョンが作成されます。 (さらに、あまり多くのモック機能を使用しないことで、実装ではなく動作をテストすることができます)。
FakeFactory
の使用例:
var target = tsUnit.FakeFactory.getFake<RealClass>(RealClass);
var result = target.run();
this.areIdentical(undefined, result);
Sinonは、mock
の代わりにcreateStubInstance
メソッドを使用すると、コンストラクターに基づいてスタブを非常に簡単に作成できます。
mocha 、 chai 、 sinon 、および sinon-chai を使用した例は、次のようになります。
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でそれらを使用する方法について詳しく知りたい場合に役立ちます。
お役に立てれば!
ヤン