我遇到了这个问题Invalid URL is thrown when requiring systemjs in jest test cases
最后一条评论建议
"通过在jsdom中设置referrer配置来操纵jsdom实例以获得有效的位置/ baseURI。"
我想知道我有办法做到这一点吗?我可以从jsdom
对象以某种方式访问jest
实例吗?
答案 0 :(得分:4)
当使用需要url(location.href)的项目时,我遇到了类似的问题。您可以在配置中使用testURL配置jest。
以下是你可能放在package.json中的内容(如果这是你配置jest的方式)。
"jest": {
...other config,
"testURL": "http://localhost:8080/Dashboard/index.html"
}
如果您需要对jsdom进行更具体的更改,您可以自己安装jsdom并将其与jest分开导入和配置。这是一个例子:
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
答案 1 :(得分:1)
我刚刚沿着这条路走下去,发现从Jest 21.2.1开始,官方的方法是分叉你自己的JSDom环境。
设置这有点痛苦,但允许深入定制。
参考文献:
示例环境:https://github.com/mes/jest-environment-jsdom-external-scripts
答案 2 :(得分:0)
jsdom是最新版Jest使用的默认环境,因此您可以简单地操纵全局变量,例如window
,document
或location
。
答案 3 :(得分:0)
如果您使用的jsdom
(版本11.12.0)不带jest
(例如,ava + enzyme
)
那么您可以在jsdom配置文件中设置网址
文件src/test/jsdom-config.js
const jsdom = require('jsdom') // eslint-disable-line
const { JSDOM } = jsdom
const dom = new JSDOM('<!DOCTYPE html><head/><body></body>', {
url: 'http://localhost/',
referrer: 'https://example.com/',
contentType: 'text/html',
userAgent: 'Mellblomenator/9000',
includeNodeLocations: true,
storageQuota: 10000000,
})
global.window = dom.window
global.document = window.document
global.navigator = window.navigator
package.json
中的AVA设置
{
...
"scripts": ...
...
"ava": {
"babel": "inherit",
"files": [
"src/**/*.test.js"
],
"verbose": true,
"require": [
"babel-register",
"ignore-styles",
"./src/test/jsdom-setup.js",
"./src/test/enzyme-setup.js"
]
}
}