如何在Webpack和Babel中使用TheIntern

问题描述 投票:0回答:1

我尝试使用theintern ,使我单位/ Fonctionals测试,但我用的WebPack捆绑/负载模块的WebPack-DEV-服务器本地的研究与开发和巴贝尔的transpilling JS。

当我尝试加载组件时,文件中的错误由组件中的导入导入。

// a.js
const getWindowLocation = window.location
export default getWindowLocation

// b.js
import getWindowLocation from "a.js"
const anotherVar = getWindowLocation
// make some work with anotherVar
export default anotherVar

// c.js
import anotherVar from "b.js"
// module i try to test
const something = somevalue
export default something

然后在我的测试文件中:

// test.c.js
import something from "c.js"

但是,当我加载测试套件时,会出现类似以下错误:

ReferenceError: window is not defined
at getWindowLocation  <a.js>
at Object.<anonymous>  <b.js>

我使用jsdom启用window ,它适用于c.js但不适用于其他模块。

那么,如何配置intern以在没有SystemJS和Typescript的情况下处理来自webpack的模块?

webpack intern
1个回答
1
投票

问题是c.js假定window在全局范围内。 虽然createwindow.js创建jsdom窗口,但不会将其添加到全局范围。

一种解决方案是将jsdom的window添加到全局范围:

// createwindow.js
const jsdom = require('jsdom')
const { JSDOM } = jsdom
const { window } = new JSDOM()
global.window = window;

但是,正如jsdom作者所指出的那样,这不是一个好习惯 。 相反,您的测试类应使用createWindow插件获取window

// c.js
const window = intern.getPlugin('createWindow');
const getWindowLocation = window.location
export default getWindowLocation
© www.soinside.com 2019 - 2024. All rights reserved.