tag solucionar from descargar data como javascript ecmascript-6 redux code-coverage jestjs

solucionar - void(0) javascript href



Cobertura de sucursales para el reductor Redux (2)

Creo que lo que falta es que no tienes una prueba para la rama default de la select . Necesitas agregar

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

Digamos que tengo el siguiente reductor:

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

y pruebo usando bromas con:

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

Esto produce una cobertura de rama de 4/5 . Después de pensar un poco / eliminar y / o volver a agregar líneas llegué a la lógica de bifurcación en el conjunto initialState . Lo cual casi tiene sentido. Excepto:

1) ¿Por qué la última prueba, con una llamada myReducer() vacía, myReducer() cubre este caso?

Cuando el reductor se reduce a:

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

Las pruebas (que ahora fallan) tienen una cobertura de rama de 1/1.

¿Que esta pasando aqui?

EDITAR: según la solicitud, estoy agregando la configuración. Paso el siguiente jest.json para bromear:

{ "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: La siguiente prueba tampoco afecta la cobertura de la prueba:

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

Aún no entiendo por qué la implementación de prueba predeterminada inicial no era equivalente desde una perspectiva de cobertura de rama.


la última prueba con myReducer() cubre el caso donde se aplica el valor predeterminado para initialState que está en su caso {foo: ''''} .