5

ここにいくつかのコンテキストがあります。私は、ES6 で書かれた React と Immutable.js を使用するプロジェクトに取り組んでいます。私はBabelとwebpackを使用しています。

ブラウザー外で実行できるように、Mocha、Chai、および jsdom を使用していくつかの単体テストを作成しました。

問題は、一部のコンポーネントが画像を必要とするようなものを使用していることです。このようなものは、特定のローダーを介して webpack によって処理されます。

そのため、ターミナルでテストを実行すると、これらの予期しない要件のために失敗します。

Karma を使用して (ブラウザの外部でテストを実行する機能を残して)、テストを実行する前にソースをコンパイルして、webpack 構成がイメージ ローダーを無視するように (null-loader を使用して)、これを修正する方法を見つけました。

その時点で、テストはカルマを介して実行されていますが、ターミナルを介して実行されたときに合格しているのに失敗しているものもあります(テストの目的で、必要なものがあった行にコメントしました)。

失敗しているテストはすべて Immutable.js に関連しています。つまり、2 つの Immutable オブジェクトの同等性をテストしようとしています。

テストの例を次に示します。

it('handles SET_STATE', () => {
    const initialState = Map();
    const action = {
        type : 'SET_STATE',
        state : Map({
            vote : Map({
                pair : List.of('Trainspotting', '28 Days Later'),
                tally : Map({ 'Trainspotting' : 1 })
            })
        })
    };

    const nextState = reducer(initialState, action);

    expect(nextState).to.equal(fromJS({
        vote: {
            pair: ['Trainspotting', '28 Days Later'],
            tally: { 'Trainspotting': 1 }
        }
    }));
});

失敗すると、次のような結果が得られます。

1) handles SET_STATE
     reducer
     AssertionError: expected { Object (size, _root, ...) } to equal { Object (size, _root, ...) }
    at Context.<anonymous> (/Users/boris_louboff/Labs/VotingApp/voting-client/test/tests.bundle.js:36413:42 <- webpack:///test/reducer.spec.js:21:29)

不変に関連するものをテストしていない他のすべてのテストは合格しています。

誰かがこれを解決できるアイデアを持っていれば、それは素晴らしいことです! ありがとうございました。

4

2 に答える 2