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()
した場合にのみこの問題が発生します。また、この方法が使用されているチュートリアルのどこにもまだ見たことがありませんが、かなり基本的なようで、うまくいくと思います。