LoginSignup
45
39

More than 5 years have passed since last update.

TypeScript + mocha + power-assert-js + Sinon.JS テスト環境メモ

Last updated at Posted at 2015-08-11

導入

ライブラリ

npm i mocha power-assert espower-typescript sinon -D

型定義ファイル

tsd query mocha -rosa install
tsd query power-assert -rosa install
tsd query empower -rosa install
tsd query sinon -rosa install

環境内訳

mocha

単体テスト用ライブラリ。describe(),it()とか書ける。

power-assert-js

出力がみやすいassertライブラリ。
assert.deepEqual(a, b)による配列やオブジェクトの比較出力が強力。

5分ぐらいでわかるpower assert

espower-typescript

power-assert-jsのTypeScriptむけプラグイン。tsを自動でコンパイルしてくれる。

[2016-01-11追記]tsc1.6以降で,Cannot read property 'text' of undefinedというエラーが出る場合は、v2系をインストールすると回避できる。 原因

Sinon.JS

spy, mock, stubなどassertだけじゃ厳しいところをサポートしてくれるテスト用ライブラリ。

テストコード

  • 前提:nodejs環境
  • test ディレクトリ以下にtsコードを置く。
    • espower-typescriptを導入する事でビルド後のjsファイルが不要。
    • テスト対象のtsファイルもコンパイルされるので便利
  • tsd.d.tsへリファレンスパス通す
  • BDDスタイルなら以下
sample-test.ts
/// <reference path="../typings/tsd.d.ts" />

import * as assert from 'power-assert';
import * as mytest from '../src/mytest';

describe("Some Class", ()=>{
    context("someMethod()", ()=>{

        it("should return object", ()=>{
            const a = mytest.SomeClass.someMethod();
            const b = {c:0, d:"abc"};
            assert.deepEqual(a, b);
        });
    });
});

  • 基本的なテストはpower-assertで、複雑なものはSinon.JSを併用する
  • 各ライブラリの使い方はtsのコードになるだけであとは同じ

テスト対象コード

  • 対象のメソッドはpublicでないといけない。
    • privateprotectedではダメ
    • staticは当然OK
  • ES6方式にexportすると以下
mytest.ts
export namespace mytest{
    export class SomeClass{

        static someMethod():{c:number, d:string}{
            //...
            return {c:0,d:"abc"};
        }
    }
}

コマンド

mocha --compilers ts:espower-typescript/guess test/*-test.ts

--compilersオプションでespower-typescriptが必須

なお-wオプションでwatchもできる。

mocha --compilers ts:espower-typescript/guess -w test/*-test.ts
45
39
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
39