Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在脚本的onload回调中调用的触发器函数_Javascript_Dom_Jestjs_Stenciljs - Fatal编程技术网

Javascript 在脚本的onload回调中调用的触发器函数

Javascript 在脚本的onload回调中调用的触发器函数,javascript,dom,jestjs,stenciljs,Javascript,Dom,Jestjs,Stenciljs,我想测试一个组件(用stenciljs编写),在该组件的初始函数中,加载一个脚本,并在加载时执行一个函数。这个函数是私有的,但我想测试这个函数内部的逻辑。 不幸的是,当我用Jest测试组件时,onload回调没有被触发(在使用它时它会被触发,所以这只是一个测试问题)。 是否有可能伪造“onload”事件,以便在测试中触发我的函数 //This is called inititally in the component addScript(`https://maps.googleapis.com/

我想测试一个组件(用stenciljs编写),在该组件的初始函数中,加载一个脚本,并在加载时执行一个函数。这个函数是私有的,但我想测试这个函数内部的逻辑。 不幸的是,当我用Jest测试组件时,onload回调没有被触发(在使用它时它会被触发,所以这只是一个测试问题)。 是否有可能伪造“onload”事件,以便在测试中触发我的函数

//This is called inititally in the component
addScript(`https://maps.googleapis.com/maps/api/js?key=${API_KEY}&libraries=places`).onload = () => {
  this.initialize(); // gets not called inside test
};

export const addScript = (src: string): HTMLScriptElement => {
    const script = document.createElement('script');
    script.type = 'text/javascript';
    script.src = src;
    document.body.appendChild(script);
    return script;
 };

这是关于规格测试还是e2e测试?您可能只需要编写一个e2e测试(
newE2EPage
)来加载脚本(在真实浏览器中运行),因为规范测试(使用
newSpecPage
)只需在node.js上下文中使用虚拟浏览器上下文即可。或者,如果您不需要google maps脚本来进行测试,您可以手动调用组件的
initialize
方法(可能需要使用
@method()
decorator公开它)。