这是我正在使用的类:
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)为什么会出现这种情况,以及如何修复?(我尝试用global替换window,但得到了相同的错误。)
发布于 2018-04-11 10:26:08
您的问题可能是window.onload,这只是一个参考。在JS的初始编译过程中,window.onload被分配给最后一个参考点。你可能应该把你的源代码写成IFFE
import './src'
(function () {
  VRMaker.generateAframe()
  console.log(VRMaker.getCurrentPanorama())
})();看看能不能行得通。
发布于 2018-04-11 14:25:51
jest中没有window,也没有window.onload。如果您想测试一个模块,而不是直接导入并使用它
import VRMaker from './src'
describe('VRMaker', ()=>{
  it('does something', ()=>{
   frame = new VRMaker()
  })
})如果您想测试它是否已添加到window对象中
import VRMaker from './src'
describe('VRMaker', ()=>{
  it('does something', ()=>{
   expect(global. VRMaker).toBeDefined()
  })
})https://stackoverflow.com/questions/49765477
复制相似问题