1

Redux を取り上げようとしていますが、フォローしているチュートリアルでは ImmutableJs を使用しています。私は ImmutableJs にまったく慣れていないので、API ドキュメントに従って作業を進めています。私の練習用アプリはチュートリアルよりもはるかに複雑なので、道に迷って道に迷ってしまったかもしれません。

Map.update() メソッドを使用するたびに、コードを正常にテストする方法が見つかりません。これは、何が間違っているかを理解しようとして書いたテストです。

import chai, {expect} from 'chai';
import chaiImmutable from 'chai-immutable';
import {List, Map} from 'immutable';

chai.use(chaiImmutable);

describe("Immutable Test Issues", () => {

  it("should present accurate immutable equality", () => {

    // -- Maps with Lists match just fine    
    const a1 = Map({ test: 1, args: List([1, 2]) });
    const a2 = Map({ test: 1, args: List([1, 2]) });
    expect(a1).to.equal(a2); // pass

    // -- Maps with Lists of Maps match just fine
    const ba = { pid: 100, arg: 2 };
    const bb = { pid: 101, arg: 5 };
    const b1 = Map({ test: 1, args: List([Map(ba), Map(bb)]) });
    const b2 = Map({ test: 1, args: List([Map(ba), Map(bb)]) });
    expect(b1).to.equal(b2); // pass

    // -- using Map.update()
    const ea = { pid: 100, arg: 2 };
    const eb = { pid: 101, arg: 4 };
    const e1 = Map({ test: 1 }).update('args', List(), l => l.push([Map(ea), Map(eb)]));
    const e2 = Map({ test: 1 }).update('args', List(), l => l.push([Map(ea), Map(eb)]));
    expect(e1).to.equal(e2); // fail
    expect(e1.get('args')).to.equal(List().push([Map(ea), Map(eb)])); // fail
  });
});

私は以下を使用しています:

  • ノード: v6.3.1 および v4.4.0 (別々のワークステーション)
  • モカ: v3.0.2
  • チャイ: v3.5.0
  • チャイ不変: v1.6.0
  • 不変: v3.8.1
  • バベルコア: v6.13.2
  • バベル プリセット es2015: 6.13.2

これまでの他のテストは問題なく合格していますが、使用Map.update()した場合にのみこの問題が発生します。また、この方法が使用されているチュートリアルのどこにもまだ見たことがありませんが、かなり基本的なようで、うまくいくと思います。

4

1 に答える 1