2016-09-28 96 views
0

快照測試組件時,我只想測試組件本身,而不是Redux中的操作,狀態或連接功能。這是因爲我在其他地方測試了這些功能。Jest快照測試Redux&覆蓋

這擾亂了您的代碼覆蓋率,因爲它期望您測試所有函數。

例如:

export const EarningsInfo = ({ close }) => (/* ... */); 

const mapStateToProps = _ => ({}); 

const mapActionsToProps = dispatch => ({ 
    close: _ => dispatch(closeModal()), 
}); 

export default connect(mapStateToProps, mapActionsToProps)(EarningsInfo); 

玩笑期待您測試

  1. earningsInfo
  2. mapStateToProps
  3. mapActionsToProps
  4. connect

所以,如果你有一個簡單的測試是這樣的:

import { EarningsInfo } from '../components/EarningsInfo'; 

it('renders correctly',() => { 
    const tree = renderer.create(
    <EarningsInfo close={() => null } /> 
).toJSON(); 

    expect(tree).toMatchSnapshot(); 
}); 

代碼覆蓋率報告,您只是在測試文件的25%。我相信這是按預期工作的。

我的問題是雙重的

  1. 我是在我的思想糾正mapStateToPropsmapActionsToPropsconnect不應該需要進行測試。
  2. 有沒有辦法忽略一個函數的名稱爲覆蓋目的?
+0

其實在查看這個http://redux.js.org/docs/recipes/WritingTests.html#connected-components後,我相信我認爲測試應該在組件本身上,而不是其他功能上。那麼真的,忽略Jest中函數名稱的最好方法是什麼? –

+0

就我個人而言,我會將'EarningsInfo'組件導出爲一個命名導出(除了連接組件的默認導出之外)並僅測試原始的'EarningsInfo'組件。然後進行一些集成測試,確保東西連接正確。 – kentcdodds

回答

1
  1. connect不應被測試爲react-redux自己的測試已經覆蓋這一點。如果mapStateToPropsmapActionsToProps有任何非標準/複雜/業務邏輯,那麼測試它們可能是有意義的。

  2. 是的,但它可以是一個有點脆弱 - http://blog.dmbcllc.com/es2015-code-coverage-and-jest-react-js-unit-testing/

不要擔心100%的代碼覆蓋率,重點放在什麼是重要的,可以與單元測試測試好/容易。