如何处理在Jest / Enzyme集成测试中使用存储的组件中导入的助手?

时间:2019-03-28 10:44:18

标签: reactjs redux jestjs enzyme

我正在使用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(中显然崩溃了。我想使用相同的模拟存储来安装所有包含(帮助程序,其他函数访问存储)的组件。有解决方案吗?

0 个答案:

没有答案