Jsdom: 将本地脚本的路径澄清为绝对路径

创建于 2016-05-13  ·  4评论  ·  资料来源: jsdom/jsdom

至于现在,jsdom 设置注入脚本src没有任何检查或解析。 IIRC,有人提议为config添加一个单独的本地脚本集。 在那之前,也许主要的帮助文档应该澄清本地脚本的路径必须是绝对的(或类似path.join(__dirname, 'script.js')的东西)。 这些都不能作为正确的本地路径:

scripts: ['script.js']

scripts: ['.\\script.js']

scripts: ['./script.js']

我不确定这个警告的正确位置是什么,所以我不敢做 PR。

documentation fixed in newapi

最有用的评论

require.resolve()适用于自述文件中的一些示例代码:

scripts: [
  require.resolve('./myscript.js'),
  require.resolve('jquery')
]

所有4条评论

require.resolve()适用于自述文件中的一些示例代码:

scripts: [
  require.resolve('./myscript.js'),
  require.resolve('jquery')
]

https://github.com/tmpvar/jsdom/issues/1733相关

当我尝试通过以下方式加载脚本时:

scripts: [
  require.resolve('./myscript.js'),
  require.resolve('jquery')
]

它似乎不起作用。 测试用例:

import test from 'ava'

// import { readFileSync } from 'fs'
import { jsdom, createVirtualConsole } from 'jsdom'

// const systemJSContent = readFileSync(require.resolve('systemjs'), { encoding: 'utf-8' })

const cwd = process.cwd()
let window
test.beforeEach(() => {
  const virtualConsole = createVirtualConsole().sendTo(console)
  const document = jsdom('',
    {
      url: `file://${cwd}/index.html`,
      virtualConsole,
      scripts: [
        require.resolve('systemjs')
      ]
    })
  window = document.defaultView

  // let scriptEl = document.createElement('script')
  // scriptEl.textContent = systemJSContent
  // document.body.appendChild(scriptEl)
})

test(async t => {
  // SystemJS should create global `SystemJS` variable.
  console.log(window.SystemJS)
  t.not(window.SystemJS, undefined)
})

如果我切换到直接加载文件,测试将通过:

import test from 'ava'

import { readFileSync } from 'fs'
import { jsdom, createVirtualConsole } from 'jsdom'

const systemJSContent = readFileSync(require.resolve('systemjs'), { encoding: 'utf-8' })

const cwd = process.cwd()
let window
test.beforeEach(() => {
  const virtualConsole = createVirtualConsole().sendTo(console)
  const document = jsdom('',
    {
      url: `file://${cwd}/index.html`,
      virtualConsole,
//      scripts: [
//        require.resolve('systemjs')
//      ]
    })
  window = document.defaultView

  let scriptEl = document.createElement('script')
  scriptEl.textContent = systemJSContent
  document.body.appendChild(scriptEl)
})

test(async t => {
  // SystemJS should create global `SystemJS` variable.
  console.log(window.SystemJS)
  t.not(window.SystemJS, undefined)
})

测试代码可以在这里看到: https ://github.com/unional/some-issues/tree/jsdom-scirpts

是因为jsdom()不加载脚本吗?

而且它不允许您单独提供它将注入和执行的脚本。

更新:没关系。 这就是原因。 该测试通过:

test('use scripts property', t => {
  return new Promise(r => {
    env(`file://${cwd}/index.html`,
      {
        virtualConsole,
        scripts: [
          require.resolve('systemjs')
        ],
        done(_err, window: any) {
          t.not(window.SystemJS, undefined)
          r()
        }
      })
  })
})

在即将发布的 v12 中删除旧 API 时关闭。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

philipwalton picture philipwalton  ·  4评论

tolmasky picture tolmasky  ·  4评论

mitar picture mitar  ·  4评论

josephrexme picture josephrexme  ·  4评论

drewish picture drewish  ·  4评论