javascript - Redux reducer के लिए शाखा कवरेज




ecmascript-6 code-coverage (2)

कहें कि मेरे पास निम्न reducer हैं:

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)
}

और मैं इस के साथ मज़ाक का उपयोग कर परीक्षण करता हूं:

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: ''})
})

यह 4/5 एक शाखा कवरेज का उत्पादन करता है थोड़ी सी सोच / हटाना और / या लाइनों को फिर से जोड़ने के बाद, मैं initialState सेट पर शाखाओं के तर्क पर आया हूं। जो लगभग समझ में आता है के सिवाय:

1) आखिरी परीक्षा क्यों नहीं है, एक रिक्त myReducer() कॉल के साथ इस मामले को कवर किया गया है।

जब रीड्यूसर को नीचे दिया जाता है:

const myReducer = (initialState = {foo: ''}, action) => {
    const state = {}
    return Object.assign({}, initialState, state)
}

परीक्षण (जो अब असफल) में 1/1 की एक शाखा कवरेज है

यहाँ क्या हो रहा है?

संपादित करें: अनुरोध के अनुसार, मैं विन्यास जोड़ रहा हूँ मैं निम्नलिखित jest.json पास करने के लिए पास:

{

  "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
    }
  }
}

EDIT2: निम्नलिखित परीक्षण भी परीक्षण कवरेज को प्रभावित नहीं करता है:

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

मुझे अभी भी समझ में नहीं आ रहा है कि प्रारंभिक डिफ़ॉल्ट परीक्षा का कार्यान्वयन एक शाखा कवरेज परिप्रेक्ष्य के बराबर क्यों नहीं था।


मुझे लगता है कि क्या गुम है, यह है कि आपके पास select की default शाखा के लिए कोई परीक्षण नहीं है। आपको जोड़ना होगा

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

myReducer() साथ अंतिम परीक्षा में उस केस को शामिल किया गया है जहां initialState का डिफ़ॉल्ट मान आपके मामले में है {foo: ''} लागू हो जाता है





jestjs