这是我正在上课的课程:
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)
为什么会这样以及如何解决? (我尝试用window
替换global
但我收到同样的错误。)
答案 0 :(得分:1)
您的问题可能是window.onload
,这只是一个参考。在初始编译JS window.onload时,会将其分配给最后一个参考点。
您应该将源代码设为IFFE
import './src'
(function () {
VRMaker.generateAframe()
console.log(VRMaker.getCurrentPanorama())
})();
看看是否有效。
答案 1 :(得分:1)
开玩笑中没有window
和window.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()
})
})