首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在下面的Jest测试中获取窗口/全局?

如何在下面的Jest测试中获取窗口/全局?
EN

Stack Overflow用户
提问于 2018-04-11 10:19:55
回答 2查看 311关注 0票数 1

这是我正在使用的类:

代码语言:javascript
运行
复制
class VRMaker extends Aframe {
  constructor () {
    super(...arguments)
  }
}

window.VRMaker = new VRMaker()
export default VRMaker

我是这样使用它的:

代码语言:javascript
运行
复制
import './src'

window.onload = function () {
  VRMaker.generateAframe()
  console.log(VRMaker.getCurrentPanorama())
}

但是,当我尝试访问Jest文件中的VRMaker时:

代码语言:javascript
运行
复制
import '../src'

test('first test', () => {
  let result
  window.onload = function () {
    console.log(VRMaker)
    result = VRMaker
    expect(result).toEqual({})
  }
})

我得到了这个错误:

代码语言:javascript
运行
复制
  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)

为什么会出现这种情况,以及如何修复?(我尝试用global替换window,但得到了相同的错误。)

EN

回答 2

Stack Overflow用户

发布于 2018-04-11 10:26:08

您的问题可能是window.onload,这只是一个参考。在JS的初始编译过程中,window.onload被分配给最后一个参考点。你可能应该把你的源代码写成IFFE

代码语言:javascript
运行
复制
import './src'

(function () {
  VRMaker.generateAframe()
  console.log(VRMaker.getCurrentPanorama())
})();

看看能不能行得通。

票数 1
EN

Stack Overflow用户

发布于 2018-04-11 14:25:51

jest中没有window,也没有window.onload。如果您想测试一个模块,而不是直接导入并使用它

代码语言:javascript
运行
复制
import VRMaker from './src'

describe('VRMaker', ()=>{
  it('does something', ()=>{
   frame = new VRMaker()
  })
})

如果您想测试它是否已添加到window对象中

代码语言:javascript
运行
复制
import VRMaker from './src'

describe('VRMaker', ()=>{
  it('does something', ()=>{
   expect(global. VRMaker).toBeDefined()
  })
})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49765477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档