Immutablejs Map.update打破了unit testing

我试图拿起Redux和我下面的教程使用ImmutableJs。 我对ImmutableJs是完全陌生的,我只是想通过API文档去实现。 我的练习应用比教程复杂得多,所以我走了一段路,可能已经迷路了。

任何时候我使用Map.update()方法,我无法find一种方法来成功地testing我的代码。 这是我写的一个testing,试图找出什么是错的:

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
  • chai-immutable:v1.6.0
  • 不可变的:v3.8.1
  • babel-core:v6.13.2
  • babel-preset-es2015:6.13.2

到目前为止,我的其他testing通过罚款,只有当我使用Map.update()我最终与这个问题。 我也没有看到任何地方在教程中使用这个方法,但是,它似乎很基本,我希望它的工作。

在对GitHub的chai-immutable问题进行了一些更深入的挖掘之后,发现我的问题是当我使用List.push()时混合了可变和不可变的结构。 更改:

 const e1 = Map({ test: 1 }).update('args', List(), l => l.push([Map(ea), Map(eb)])); 

 const e1 = Map({ test: 1 }).update('args', List(), l => l.push(List([Map(ea), Map(eb)]))); 

所有的作品都很好