Javascript 如何在下面的Jest测试中获得window/global?
这是我正在学习的课程:Javascript 如何在下面的Jest测试中获得window/global?,javascript,jestjs,Javascript,Jestjs,这是我正在学习的课程: class VRMaker extends Aframe { constructor () { super(...arguments) } } window.VRMaker = new VRMaker() export default VRMaker 我是这样使用它的: import './src' window.onload = function () { VRMaker.generateAframe() console.log(VRMak
class VRMaker extends Aframe {
constructor () {
super(...arguments)
}
}
window.VRMaker = new VRMaker()
export default VRMaker
我是这样使用它的:
import './src'
window.onload = function () {
VRMaker.generateAframe()
console.log(VRMaker.getCurrentPanorama())
}
但是,当我尝试在Jest文件中访问VRMaker时:
import '../src'
test('first test', () => {
let result
window.onload = function () {
console.log(VRMaker)
result = VRMaker
expect(result).toEqual({})
}
})
我得到这个错误:
MethodMissingError: __call, use method '__call(method, args)' in your class to catch.
> 44 | console.log(VRMaker)
45 | result = VRMaker
46 | expect(result).toEqual({})
47 | })
at Object.get (node_modules/method-missing/lib/proxy.js:38:13)
at Object.<anonymous>.test (test/helpers.test.js:44:11)
MethodMissingError:_调用,在类中使用方法“_调用(方法,参数)”来捕获。
>44 |控制台日志(VRMaker)
45 |结果=VRMaker
46 |期望(结果).toEqual({})
47 | })
在Object.get(node_modules/method missing/lib/proxy.js:38:13)
at Object..test(test/helpers.test.js:44:11)
这是为什么?如何解决?(我尝试将
窗口
替换为全局
,但我得到了相同的错误。)您的问题可能是窗口。onload
,这只是一个参考。在JS window.onload的初始编译期间,会将其分配给最后一个参考点。
您可能应该将源代码放在IFFE中
import './src'
(function () {
VRMaker.generateAframe()
console.log(VRMaker.getCurrentPanorama())
})();
看看这是否可行。没有
窗口,也没有窗口。onload
只是开玩笑。如果您有一个要测试的模块,则不只是导入它并直接在其上工作
import VRMaker from './src'
describe('VRMaker', ()=>{
it('does something', ()=>{
frame = new VRMaker()
})
})
如果要测试它是否已添加到窗口对象中
import VRMaker from './src'
describe('VRMaker', ()=>{
it('does something', ()=>{
expect(global. VRMaker).toBeDefined()
})
})
所以IFFE应该在窗口内。onload
?内部测试(
?主src文件。实际上,基于window.onload的编程在我看来是错误的。您应该在测试中导入/导出并使用它,并对其进行测试。这样IFFE应该放在Jest测试文件中,对吗?但是在哪一部分?因为src/index.js
文件是一个类声明。请尝试在Jest文件中从“../src”导入VRMaker
,然后针对该问题进行测试