Как иметь переменную область видимости внутри jest'а?

Я создал этот тест для утилиты push (которая создает новый массив), которую я создал:

export const push = (array, value) => [...array, value]

describe('push', () => {
  const a = ['1']

  it('creates copy', () => {
    const b = a
    b.push('2')
    expect(a).toBe(b)
  })

  it('creates clone', () => {
    const b = a
    console.log(a)
    push(b, '2')
    expect(a).not.toBe(b)
  })
})

Я был удивлен, узнав, что console.log(a) дал: [ '1', '2' ]. Я думал, что b.push('2') не покинет окружающий его it.

Как сделать так, чтобы код внутри it применялся только к прицелу?

const b = a.slice(); - создаст новый объект массива
Sarun UK 02.10.2020 17:39
0
1
32
1

Ответы 1

Когда b ссылается на a в 'creates copy', и вы нажимаете на него 2, вы модифицируете a (потому что они оба относятся к одному и тому же месту, а const не предотвращает операции изменения, такие как push).

Когда запускается второй случай, то есть 'creates clone', он использует тот же a, то есть тот, который вы изменили, и, следовательно, будет регистрировать [ '1', '2' ].

Другие вопросы по теме