Redux减速机的分支覆盖范围

Abr*_*m P 9 javascript code-coverage ecmascript-6 jestjs redux

说我有以下减速机:

import {FOO} from '../const/Foo'

const myReducer = (initialState = {foo: ''}, action) => {
  const state = {}
  if (action) {
    switch (action.type) {
      case FOO:
        state.foo = action.foo
    };
  }
  return Object.assign({}, initialState, state)
}
Run Code Online (Sandbox Code Playgroud)

我使用jest测试:

import FOO from '../const/Foo'

test('returns correct state when action is not "Foo"', () => {
  expect(myReducer({foo: 'bar'}, {type: 'foo'})).toEqual({foo: 'bar'})
})

test("returns correct state when action is 'Foo'", () => {
  expect(myReducer({}, {type: FOO, foo: 'bar'})).toEqual({foo: 'bar'})
})

test('when there is no action / testing the default', () => {
  expect(myReducer()).toEqual({foo: ''})
})
Run Code Online (Sandbox Code Playgroud)

这产生了分支覆盖率4/5.在稍微考虑/删除和/或重新添加行之后,我已经到达了initialState集合上的分支逻辑.这几乎是有道理的.除了:

1)为什么没有最后一次测试,空myReducer()呼叫覆盖这种情况.

当减速机削减到:

const myReducer = (initialState = {foo: ''}, action) => {
    const state = {}
    return Object.assign({}, initialState, state)
}
Run Code Online (Sandbox Code Playgroud)

测试(现在失败)的分支覆盖率为1/1.

这里发生了什么?

编辑:根据请求,我添加配置.我将以下jest.json传递给jest:

{

  "bail": true,
  "verbose": true,
  "moduleNameMapper": {
    "\\.(sass|jpg|png)$": "<rootDir>/src/main/js/config/emptyExport.js"
  },
  "testRegex": ".*(?<!snapshot)\\.(test|spec)\\.js$",
  "collectCoverage": true,
  "collectCoverageFrom": ["src/main/js/**/*.js"
    , "!**/node_modules/**"
    , "!**/*spec.js"
    , "!src/main/js/config/emptyExport.js"
    , "!**/coverage/**/*.js"
    , "!src/main/js/app.js"
    , "!src/main/js/store/configureStore.js"
    , "!src/main/js/reducers/index.js"],
  "coverageDirectory": "<rootDir>/src/main/js/coverage",
  "coverageThreshold": {
    "global": {
      "branches": 85,
      "function": 95,
      "lines": 95,
      "statements": 95
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

EDIT2:以下测试也不影响测试覆盖率:

test('when there is no action / testing the default', () => {
  expect(addressReducer(undefined, {foo: 'bar'})).toEqual({address: ''})
})
Run Code Online (Sandbox Code Playgroud)

我仍然不明白为什么初始默认测试实现从分支覆盖的角度来看并不相同.

小智 2

最后一个测试涵盖了应用您的情况的myReducer()默认值的情况。initialState{foo: ''}