使用Immutable.js测试可更改多个属性的reducer

时间:2018-08-27 13:25:35

标签: testing redux immutable.js

我正在尝试将React / Redux应用程序迁移到Immutable.JS,并且对测试有疑问。

给出一个执行如下操作的减速器:

export default (state = initialState, action) => {
  switch (action.type) {

  case RUN_ENDED:
    return state.set('isRunning', false)
                .set('roundResult', action.data)
  default:
   return state
}

我想测试两个属性的设置是否正确。

我以前的测试看起来像这样:

it('should handle the RUN_ENDED action', () => {

  const action = {
    type: RUN_ENDED,
    data: {
      winnerId: 0
    }
  }

  const result = simulatorReducer(undefined, action)

  expect(result).to.deep.equal({
    isRunning: false,
    roundResult: action.data
  })

})

使用不可变,我似乎无法以完全相同的方式进行这些比较。我可以用result来显式检查result.get('theProperty')中的每个值,但是如果我有5-6个值,这似乎有点费力。

是否有某种方法可以使用Immutable做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以使用https://www.npmjs.com/package/jest-immutable-matchers

例如: expect(result).toEqualImmutable(Immutable.Map({isRunning: false, ...}));