如何获得减速机单元测试工作?
试图为我的redux reducer为购物车创建一个单元测试。这是减速,该项目被添加到项目属性:如何获得减速机单元测试工作?
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
我钗单元测试是这样的:
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}]})
})
})
为什么会出现这种错误,以及如何解决这一问题?
错误:
TypeError: Cannot convert undefined or null to object
at Function.from (native)
at _toConsumableArray (app\reducers\cart.js:7:182)
您拨打tetsts减速机采用空数组作为国家
reducer([], {...})
所以state.items是不确定的。然后你尝试解构它
items: [...state.items,action.data]
并得到这个错误。
请检查state.items存在 - 这样的,比如
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
}
}
const {items = []} = state;做到了吗? –
简短形式的const items = state.items;如果(!items)items = [];阅读https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment –
非常感谢,非常感谢 –
您的代码看起来确定。我想错误是在你没有发布的部分。你能发布减速器和测试的所有代码吗? –
嗨Artem见上面 –
'.to.deep.equal({items:{id:124,price:2332}})'应该是'.to.deep.equal({items:[{id:124,price: 2332}]})' –