我正在使用Jest +酶来测试React / Redux应用程序,我想进行集成测试,以检查购物车中商品的“更新商品”操作类型。问题是-使用酶安装CartItem
组件后,我无法访问在CartItem
组件中导入的帮助器函数中传递的存储。原因是这些助手正在导入实际应用中使用的主存储,而不是将此模拟存储传递给安装函数。
我尝试安装整个应用程序,该应用程序使用传递给index.js中提供者的相同存储,但是我意识到这不是正确的方法,因此我尝试隔离CartItem
组件为了测试目的通过了模拟商店。
在测试文件中,我初始化存储在beforeEach()
函数中,如下所示:
beforeEach(()=>{
...
store = createStore(reducers, state, applyMiddleware(thunk));
})
然后,将组件安装如下:
it('should update item', async () => {
...
const wrapper = mount(<Provider store={store}><CartItem>
</CartItem></Provider>);
...
});
问题在于CartItem
组件中导入的帮助程序,例如。 formatPrice
功能:
...
import Store from 'store'
...
export function formatPrice(amount, productCountry = null){
const exponent = Store.getState().auth.user.user_setting.currency.exponent;
let price = parseFloat(amount);
let roundedPrice = parseFloat(price.toFixed(exponent)).toLocaleString('en', {minimumFractionDigits: exponent, maximumFractionDigits: exponent}).replace(/,/g , "");
return roundedPrice;
}
在尝试访问未初始化为与组件相同状态的存储中的数据时, test在Store.getState(
中显然崩溃了。我想使用相同的模拟存储来安装所有包含(帮助程序,其他函数访问存储)的组件。有解决方案吗?