2015-12-02 7 views
5

ここにいくつかのコンテキストがあります。 私はES6で書かれたReactとImmutable.jsを使ってプロジェクトを進めています。 私はBabelとwebpackを使用しています。カルマで実行されたときにImmutable.jsを使用したモカテストが失敗しました

私はMocha、Chai、jsdomを使って単体テストを書いたので、ブラウザの外で実行することができました。

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

端末でテストを実行すると、これらの不必要な要求のためにテストが失敗します。

カルマを使って(ブラウザの外でテストを実行できるようにしておく)、テストを実行する前にソースをコンパイルして、webpackの設定がイメージローダーを無視するようにしましたローダ)。

この時点で、テストはカルマを介して実行されていますが、端末を経由して実行されているときには失敗しているものもあります(テストの目的のために必要なものがある行についてコメントしました)。

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

は、テストのexempleです:

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) 

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

これを解決できるものがあれば、誰かがそれが素晴らしいと思いますか? ありがとうございます。

答えて

6

私は最終的に問題が何かを発見しました!

期待値to.equalは、環境(ノードまたはブラウザ)によって異なるように見えます。

const map1 = Map({a: 1, b: 2}); 
const map2 = Map({a: 1, b: 2}); 

// In Node 
expect(map1).to.equal(map2) // true 

// In a browser 
expect(map1).to.equal(map2) // false 

ソリューションは、(Immutable.js APIの.isを使用することです)

expect(Immutable.is(map1, map2)).to.be.true // true in both Node and browser ! 
+1

は[OK]を、この誤解を招くような情報については申し訳ありません...私は完全にあった忘れてしまった何かがある しかし、私はあなたがコマンドとモカを使用して実行できるようにファイルのすべての私のテストでこれを含める方法を見つけることができませんでしたNode environnement ... chai-immutableモジュールで動作しています!!!それは期待を働かせる仕事をしていた!!!私はそれをカルマのバージョンで動作させようとしています... – websilone

3

あなたの提案が動作しますが、これは問題を解決するために必要なコードの一部です:

import chai from 'chai'; 
import chaiImmutable from 'chai-immutable'; 

chai.use(chaiImmutable); 

追加後、expect(map1).to.equal(map2) // trueがカルマで動作します。

mocha --compilers js:babel-core/register --require ./test/test_helper.js\"test/**/*@(.js|.jsx)\" 
関連する問題