2016-01-21 16 views
5

Doszedłem przeciwko tej kwestii Invalid URL is thrown when requiring systemjs in jest test casesJak mogę skonfigurować instancję jsdom używaną przez żart?

Jeden z ostatnich komentarzy sugeruje

„manipulować wystąpienie jsdom mieć ważny Lokalizacja/baseURI poprzez ustawienie config odsyłających w jsdom”.

Zastanawiam się, czy istnieje dla mnie sposób, aby to zrobić? Czy mogę uzyskać dostęp do instancji jsdom w jakiś sposób z obiektu jest?

Odpowiedz

0

jsdom jest domyślnym środowiskiem używanym przez najnowszą wersję Jeste, więc możesz po prostu manipulować zmiennymi globalnymi, takimi jak window, document lub location.

+1

Od jsdom V11, 'window.location' obiektowo stać nie konfigurowalny, a tym samym nie mogą być modyfikowane z 'Object.defineProperty()' już. – Blackus

2

Miałem podobny problem podczas korzystania z projektu wymagającego adresu URL (location.href). Możesz skonfigurować żart z testURL w swojej konfiguracji.

Oto, co możesz umieścić w package.json (jeśli tak skonfigurujesz żart).

"jest": { 
    ...other config, 
    "testURL": "http://localhost:8080/Dashboard/index.html" 
} 

testURL Doc

Jeśli potrzebujesz bardziej szczegółowych zmian jsdom można zainstalować jsdom siebie i import i skonfigurować go oddzielnie od żartu. Oto przykład:

test.js

'use strict'; 
import setup from './setup'; 
import React from 'react'; 
import { mount } from 'enzyme'; 
import Reportlet from '../components/Reportlet.jsx'; 

it('Reportlet Renders',() => { 
    ...some test stuff 
}); 

setup.js

import jsdom from 'jsdom'; 
const DEFAULT_HTML = '<html><body></body></html>'; 

// Define some variables to make it look like we're a browser 
// First, use JSDOM's fake DOM as the document 
global.document = jsdom.jsdom(DEFAULT_HTML); 

// Set up a mock window 
global.window = document.defaultView; 
global.window.location = "https://www.bobsaget.com/" 
// ...Do extra loading of things like localStorage that are not supported by jsdom 
Powiązane problemy