我碰到這個問題Invalid URL is thrown when requiring systemjs in jest test cases如何配置jest使用的jsdom實例?
一個最後的意見建議
「操縱jsdom例如,通過在jsdom設置引薦配置有一個有效的位置/基本URI。」
我想知道有沒有辦法做到這一點?我可以從jest
對象以某種方式訪問jsdom
實例嗎?
我碰到這個問題Invalid URL is thrown when requiring systemjs in jest test cases如何配置jest使用的jsdom實例?
一個最後的意見建議
「操縱jsdom例如,通過在jsdom設置引薦配置有一個有效的位置/基本URI。」
我想知道有沒有辦法做到這一點?我可以從jest
對象以某種方式訪問jsdom
實例嗎?
jsdom是默認的環境玩笑的最新版本使用,所以你可以簡單地操作全局變量,如window
,document
或location
。
我在使用需要url(location.href)的項目時遇到了類似的問題。您可以在配置中使用testURL配置jest。
下面是你可能會把你的package.json(如果這是你如何配置笑話)。
"jest": {
...other config,
"testURL": "http://localhost:8080/Dashboard/index.html"
}
如果您需要更具體的變化jsdom可以安裝jsdom自己和進口和從玩笑單獨配置它。這裏有一個例子:
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
我只是去沿着這條道路,結果發現,作爲玩笑21.2.1,官方的方法是分叉你自己的JSDom環境。
這有點痛苦,但可以進行深入的自定義設置。
參考文獻:
樣品環境:https://github.com/mes/jest-environment-jsdom-external-scripts
從jsdom V11,'window.location'對象成爲不可配置的,並且因此不能被修改與'Object.defineProperty()'了。 – Blackus