在玩笑测试中未定义innerText

omr*_*don 10 javascript reactjs jestjs

使用笑话进行测试时,我看到该属性innerText未定义,而未经测试,它具有正确的值。

  it('get text from div', () => {
    const div = document.createElement('DIV')
    div.innerHTML = '<br>a<br>b<br>c'
    console.log('innerText', div.innerText) // undefined
    console.log('textContent', div.textContent) // 'abc'
    // expect(getTextFromDiv(div).length).toMatchSnapshot()
  })
Run Code Online (Sandbox Code Playgroud)

但是,如果在笑话测试中未使用相同的代码,innerText将显示:

'a

b

c'
Run Code Online (Sandbox Code Playgroud)

和textContent是'abc'

为什么在笑话中的innerText是未定义的,而当不在笑话中时,其值是真实的?

这是它起作用的代码(不是开玩笑):

const addTextInRichTextToPdf = (doc, text, offsetY) => {
  const div = document.createElement('DIV')
  div.innerHTML = '<br>a<br>b<br>c'
  console.log('innerText', div.innerText) // print the real value
  console.log('textContent', div.textContent) // 'abc'
  ...
Run Code Online (Sandbox Code Playgroud)

Gab*_*leu 10

如果您使用的是默认testEnvironment,那么你正在使用jsdom。

您可以检查此问题以查看为什么未在jsdom中实现它:https : //github.com/tmpvar/jsdom/issues/1245

主要问题是这样的事实,即innerText依靠布局引擎进行指导,而jsdom没有布局引擎

如果您想要“全面”的浏览器支持,则可以检查puppeteer

  • 那些寻找替代方案的人应该考虑“tex​​tContent”而不是“innerText”。 (11认同)
  • `textContent` 帮助解决了我的问题。谢谢! (2认同)

Ian*_*amz 9

尝试使用textContent而不是innerText