Jsdom: Perjelas jalur ke skrip lokal menjadi mutlak

Dibuat pada 13 Mei 2016  ·  4Komentar  ·  Sumber: jsdom/jsdom

Untuk saat ini , jsdom menyetel skrip yang disuntikkan src tanpa pemeriksaan atau penyelesaian apa pun. IIRC, ada proposal untuk menambahkan set terpisah untuk skrip lokal ke config . Sampai saat itu, mungkin dokumen bantuan utama harus mengklarifikasi bahwa jalur ke skrip lokal harus absolut (atau sesuatu seperti path.join(__dirname, 'script.js') ). Tidak ada yang akan berfungsi sebagai jalur lokal yang tepat:

scripts: ['script.js']

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

scripts: ['./script.js']

Saya tidak yakin di mana tempat yang tepat untuk peringatan ini, jadi saya tidak berani membuat PR.

documentation fixed in newapi

Komentar yang paling membantu

require.resolve() akan bagus untuk beberapa contoh kode di readme:

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

Semua 4 komentar

require.resolve() akan bagus untuk beberapa contoh kode di readme:

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

Terkait dengan https://github.com/tmpvar/jsdom/issues/1733

Ketika saya mencoba memuat skrip dengan:

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

Tampaknya tidak berhasil. Kasus cobaan:

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)
})

Jika saya beralih untuk memuat file secara langsung, tes akan lulus:

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)
})

Kode uji dapat dilihat di sini: https://github.com/unional/some-issues/tree/jsdom-scirpts

Apakah karena jsdom() tidak memuat skrip?

Dan itu tidak memungkinkan Anda untuk secara terpisah menyediakan skrip yang akan disuntikkan dan dijalankan.

PEMBARUAN: tidak apa-apa. Itulah alasannya. Tes ini lolos:

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()
        }
      })
  })
})

Menutup karena API lama sedang dihapus di v12.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

khalyomede picture khalyomede  ·  3Komentar

amfio picture amfio  ·  3Komentar

cg433n picture cg433n  ·  3Komentar

domenic picture domenic  ·  3Komentar

mitar picture mitar  ·  4Komentar