Quiero recordar la explicación técnica de este comportamiento y cómo hacerlo correctamente.
sample.js (en realidad, este es un simulacro muy largo, por lo que está en un archivo separado)
const data = { a = 1, nested: { object: 'old' } } export default data;data.spec.js
import sampleData from './sample' describe('sample', () => { let data; beforeEach( data = sampleData ) it('change data', () => { data.nested.object = 'new'; // lets say value was old before .... }) it('change data', () => { console.log(data.nested.object) // i would think it would be 'old' but is still 'new' .... })Mi cerebro dice que lo está haciendo porque todo lo que hice fue agregar un puntero al objeto y todavía estoy modificando el objeto para que beforeEach no haga nada. Siento que hay una explicación más larga que estoy olvidando
Pero quiero saber la forma correcta de hacerlo. si convierto el archivo de datos de muestra en una función y hago que 'devuelva' el objeto cada vez Eso parece correcto dado que uso una función de flecha. Pero eso se siente incorrecto. ¿Hay algo que estoy olvidando?
Su suposición es correcta, pero no olvide hacer una copia de sus datos de prueba antes de cambiarlos.
Por ejemplo:
beforeEach(() => { data = structuredClone(sampleData); });O para una versión anterior de ecmascript:
beforeEach(() => { data = { ...sampleData, nested: { ...sampleData.nested } }; });