2017-12-07 8 views
1

私はジューストでカウンターレデューサーをテストしようとしていますが、INCREMENTをディスパッチするときにはTypeError: state.get is not a functionが得られます。 ここに私のコードは、それがブラウザ上で罰金ランニングを働いているので、私は私のコードに問題が何得ることはありません...ジストテスト: "state.getは関数ではありません"

// module.js 
import { fromJS } from 'immutable'; 
... 

const initialState = fromJS({ 
    value: 0, 
}); 

export default function reducer(state = initialState, action) { 
    switch (action.type) { 
    case INCREMENT: 
     return state.set('value', state.get('value') + 1); 
    case DECREMENT: 
     return state.set('value', state.get('value') - 1); 
    case INCREMENT_IF_ODD: 
     return (state % 2 !== 0) ? state.set('value', state.get('value') + 1) : state; 
    default: 
     return state; 
    } 
} 

// module.test.js 
import { fromJS } from 'immutable'; 

import reducer, { types } from './module'; 

const { INCREMENT, DECREMENT, INCREMENT_IF_ODD } = types; 

describe('Counter reducer',() => { 
    it('should return the initial state',() => { 
    expect(reducer(undefined, {})).toEqual(fromJS({ 
     value: 0, 
    })); 
    }); 

    it(`should handle ${INCREMENT}`,() => { 
    expect(reducer(0, { type: INCREMENT })).toEqual(fromJS({ 
     value: 1, 
    })); 
    }); 

    ... 
}); 

です。

減速関数内0.get(..)をしようとするので、減速機に渡された店は、0であるため、ここでエラー

FAIL src/containers/Counter/module.test.js 
    ● Counter reducer › should handle Counter/INCREMENT 

    TypeError: state.get is not a function 

     at reducer (src/containers/Counter/module.js:34:50) 
     at Object.<anonymous> (src/containers/Counter/module.test.js:25:33) 
      at new Promise (<anonymous>) 
      at <anonymous> 

答えて

1

エラーがあります。 還元剤に渡される最初の引数は、初期値でなければなりません。

it(`should handle ${INCREMENT}`,() => { 
    const initialState = fromJS({ 
    value: 0, 
    }); 

    expect(reducer(initialState, { type: INCREMENT })).toEqual(fromJS({ 
    value: 1, 
    })); 
}); 
関連する問題