์ฐ๋ฆฌ๋ expect(document.activeElement).toBe(myElement)
ํจํด๊ณผ ํจ๊ป ๋๋ด ํ
์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ํธ์์ฉ ํ์ ์์๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ด์ ์ ๋ง์ถ์๋์ง ํ์ธํฉ๋๋ค. jest 25(jsdom 15)๋ก ์
๊ทธ๋ ์ด๋ํ ํ ์ด๋ฌํ ๋ชจ๋ ํ
์คํธ๊ฐ ์ค๋จ๋์๊ณ document.activeElement
๋ ํญ์ null๋ก ๋ํ๋ฉ๋๋ค. jsDom 16์ ์ฌ์ฉํ์ฌ ์คํํ๋ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค.
Jest ํ ์ ์ฌ๊ธฐ์์ ๋ฌธ์ ๋ฅผ ์ด
import * as React from 'react';
it('should find active element', () => {
const wrapper = mount(<input />);
const inputNode = wrapper.find('input').getDOMNode();
expect(document.activeElement).not.toBe(inputNode);
inputNode.focus();
expect(document.activeElement).toBe(inputNode); // fails here with expected being null
});
ํฌ์ปค์ค๋ ์์๋ document.activeElement
๋ฐ์๋์ด์ผ ํฉ๋๋ค.
์ด๊ฒ์ ๋ฌธ์ ํ ํ๋ฆฟ์ ๋ฐ๋ฅด์ง ์์ต๋๋ค. ์๋ชป๋ JavaScript ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ณ ์ ์๋์ง ์์ ํจ์๋ฅผ ์ฐธ์กฐํฉ๋๋ค.
๋ฌธ์ ํ ํ๋ฆฟ์ ๋ฐ๋ฅด๋๋ก ๊ฒ์๋ฌผ์ ํธ์งํ์ฌ Node.js์์ ๋จ์ผ ํ์ผ๋ก ์คํํ ์ ์๋ ์ํ์ ์์ฑํ ๋ค์ ๋๊ธ์ ์ถ๊ฐํ์ธ์. ๋ํ jsbin ๋๋ ์ด์ ์ ์ฌํ ๋งํฌ๋ฅผ ๊ฐ๋ ฅํ ์ ์ํฉ๋๋ค. ๊ทธ ๋ ์ฐ๋ฆฌ๋ ์ด ๋ฌธ์ ๋ฅผ ๋ค์ ์ด๊ณ ๊ณ ๋ คํ ์ ์์ต๋๋ค.
ํฅ๋ฏธ๋กญ๊ฒ๋, ํจ์์ ๊ด๋ จ๋ ๊ฒ๋ค์ด ์์ด๋ ์ ์๋ํฉ๋๋ค.
https://runkit.com/wojtekmaj/jsdom-15-2-16-document-activeelement-issue-ok
๊ทธ๋ฌ๋ v15.2 ์ดํ๋ก ์ฌ์ ํ ํ๊ทํ๋ #2586๊ณผ ๋ฐ์ ํ๊ฒ ๊ฒฐํฉ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
https://runkit.com/wojtekmaj/jsdom-15-2-16-document-activeelement-issue
๊ด๋ จ: enzymejs/enzyme#2337
activeElement
๋ฅผ document
์ธ๋ถ์ ์์๋ก ์ค์ ํ์ง ์๋ ๊ฒ์ ๋ํ jsdom์ ์๊ฒฉํจ์ด ์ฆ๊ฐํ์ฌ ์ค๋จ์ด ๋ฐ์ํ ๊ฒ ๊ฐ์ต๋๋ค. ์์ ์ฌํญ์ ํด๋ผ์ด์ธํธ ์ธก์์ ๋ง์ดํธ ํธ์ถ์ attachTo
์ธ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.