2016-12-16 6 views
0

Ich versuche, einen Einheitentest für meinen Redox-Reduzierer für einen Wagen zu erstellen. Dies ist der Druckminderer, wird das Element an der Position-Eigenschaft hinzugefügt:Wie funktioniert der Test der Reduziereinheit?

const initialState = { 
    items: [], 
    cartOpen: false, 
    newMonthlyCost: 0, 
    currentMonthlyCost: 0, 
    showNextButton: false, 
    orderConfirmed: false 
} 

const Cart = (state = initialState, action) => { 
    switch (action.type) { 
     case 'ADD_TO_CART': 
      return Object.assign({}, state, 
       { 
        items: [...state.items,action.data] 
       }); 

     default: 
      return state 
    } 
} 


export default Cart 

Meine chai Unit-Test sieht wie folgt aus:

import reducer from './../../foss-frontend/app/reducers/cart.js' 
import {expect} from 'chai'; 

describe('cart reducer',() => { 

    it('should handle ADD_TO_CART',() => { 
     expect(
      reducer([], { 
       type: 'ADD_TO_CART', 
       data: { 
        id: 12, price: 2332 
       } 
      }) 
     ).to.deep.equal({items: [{id: 124, price: 2332}]}) 
    }) 
}) 

Warum bin ich diesen Fehler und wie diese zu beheben?

Fehler:

 TypeError: Cannot convert undefined or null to object 
     at Function.from (native) 
     at _toConsumableArray (app\reducers\cart.js:7:182) 
+0

Ihr Code sieht ok. Ich vermute, Bug ist in dem Teil, den du nicht gepostet hast. Können Sie den gesamten Reduktionscode posten und testen? –

+0

hi Artem siehe oben –

+0

'.to.deepe.equal ({items: {id: 124, price: 2332}})' sollte '' sein .to.deep.equal ({items: [{id: 124, Preis: 2332}]}) ' –

Antwort

2

rufen Sie Minderer bei tetsts mit leeren Array als Zustand

reducer([], {...}) 

So state.items ist nicht definiert. Dann versuchen Sie es zu dekonstruieren

items: [...state.items,action.data] 

und erhalten Sie diesen Fehler.

Bitte überprüfen Sie, dass state.items existiert - wie dies zum Beispiel

const Cart = (state = initialState, action) => { 
    switch (action.type) { 
     case 'ADD_TO_CART': 
      const { items=[] } = state; 
      return Object.assign({}, state, 
       { 
        items: [...items,action.data] 
       }); 

     default: 
      return state 
    } 
} 
+0

was bedeutet const {items = []} = state; genau machen? –

+0

Kurzform von const items = state.items; if (! items) items = []; Lesen Sie https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment –

+0

genial vielen Dank –

Verwandte Themen