• ..

TypeScript

    TypeScript と使う設定

    依存のインストール

    以下の3つをインストールします。

    yarn add -D @types/jest jest ts-jest 

    設定ファイルを作る

    以下はsrc/以下のすべての.tsまたは.tsxファイルをテストの対象にするという意味になる設定です。その時の環境に合わせてtestRegexを書き換えることでいろんな環境に合わせれます。

    module.exports = {
      moduleFileExtensions: ['ts', 'tsx', 'js'],
      transform: {
        '^.+\\.tsx?$': 'ts-jest',
      },
      testRegex: 'src/.*(/__tests__/.*|.test).tsx?$',
    };

    テストを試す

    適当にsrc/index.test.ts辺りでこんなファイルを作ります。

    test('test', () => {
      expect(1).toBe(1);
    });

    そしてyarn jestでテストが通れば完了です。

    tsconfig.json を指定する

    global['ts-jest'].tsConfigに使いたいtsconfig.xxx.jsonへのパスを渡すとその設定でテストを実行することができます。

    module.exports = {
      globals: {
        'ts-jest': {
          tsConfig: 'tsconfig.test.json',
          diagnostics: true,
        },
      },
    };
    

    tsconfig の paths を jest でも効かせる

    moduleNameMapperを指定します。

    ```js module.exports = { moduleNameMapper: { foo: '/src/foo/src/index.ts' } };

    グローバルにインストールして使う

    グローバルに Jest をインストール

    yarnの人は、

    yarn global add jest

    npmの人は多分、

    npm i -g jest

    で入ると思います。

    実行する

    グローバルの Jest を実行するには設定ファイルを指定する必要があります。Jest を TypeScript と使う設定のような感じでどこかのディレクトリに環境を作り、その環境にあるjest.config.jsを指定してあげれば大丈夫です。

    以下のような感じです。

    jest --config=~/a-project/jest.config.js

    --config 指定を省略する

    shell の設定などでエイリアスとしてjestjest --config=~/a-project/jest.config.jsとなるようなエイリアスを登録します。

    fish shell

    fishでの設定は以下のコマンドを実行します。

    echo "alias jest='jest --config=$HOME/environment/workbook/jest.config.js'" >> ~/.config/fish/config.fish

    bash

    bashの場合は~/.config/fish/config.fishの代わりに~/.bashrcに変えるだけです。

    オブジェクト関連のメソッド

    toBe

    同じ格納場所を指しているかどうか

    const obj = {};
    
    expect(obj).toBe(obj);

    上はパスしますが、いつからか下記のtoStrictEqualを使ってくださいというような警告が出るようになったので、toStrictEqualを使いましょう。

    toStrictEqual

    同じ格納場所じゃなくていいが、中身がまったく同じかどうか。

    const expected = {foo: 123};
    const value = {foo: 123};
    
    // ok
    expect(expected).toEqual(value);

    toEqual

    同じ格納場所じゃなくていいが、中身が同じかどうか。ただし値がundefinedのプロパティに関しては無くても良い。

    const expected = {foo: 123, bar: undefined};
    const value = {foo: 123};
    
    // ok
    expect(expected).toEqual(value);

    ちなみに順番は同じじゃなくても良し。

    const expected = {foo: 1};
    const value = {foo: 1};
    
    // ok
    expect({foo: 1, bar: 2}).toEqual({bar: 2, foo: 1});

    toMatchObject

    同じ格納場所じゃなくて良くて、中身も完全に同じじゃなくても良期待していないプロパティは含めては駄目です。

    const expected = {foo: 1, bar: 2};
    const value = {foo: 1};
    
    // ok
    expect(expected).toMatchObject({foo: 1});
    // fail
    expect(expected).toMatchObject({foo: 1, baz: 3});