Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.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 浏览器测试设置:如何使全局SystemJS模块可用于要求(';SystemJS';)的测试代码?_Javascript_Systemjs - Fatal编程技术网

Javascript 浏览器测试设置:如何使全局SystemJS模块可用于要求(';SystemJS';)的测试代码?

Javascript 浏览器测试设置:如何使全局SystemJS模块可用于要求(';SystemJS';)的测试代码?,javascript,systemjs,Javascript,Systemjs,我的代码相当独立于系统,在node.js或浏览器上运行的代码很少依赖于系统。我已经设法设置了基于mocha的测试,这样它就可以在这两种环境中工作,使用相同的测试和相同的代码模块。我还管理了浏览器测试环境,以自动交换对那些很少依赖于系统的包的调用,这些包总是调用node.js版本作为浏览器版本 所以一切都在运行,包括摩卡和西农以及所有的测试 直到我决定使用SystemJS不仅用于运行测试,还用于代码本身 js部分仍然可以工作,包括测试。当我运行浏览器测试时,问题出现了 对于那些我使用运行测试的in

我的代码相当独立于系统,在node.js或浏览器上运行的代码很少依赖于系统。我已经设法设置了基于mocha的测试,这样它就可以在这两种环境中工作,使用相同的测试和相同的代码模块。我还管理了浏览器测试环境,以自动交换对那些很少依赖于系统的包的调用,这些包总是调用node.js版本作为浏览器版本

所以一切都在运行,包括摩卡和西农以及所有的测试

直到我决定使用SystemJS不仅用于运行测试,还用于代码本身

js部分仍然可以工作,包括测试。当我运行浏览器测试时,问题出现了

对于那些我使用运行测试的index.html文件的人,下面是完整的

请注意,这与任何以后的产品浏览器环境无关,在这个早期阶段,我只想测试我已经针对浏览器的代码(完全基于网络和存储,没有任何GUI内容,在浏览器上使用IndexedDB,在node.js和browser上使用WebSocket)

关键是这条线——这是唯一一条新的线,其他一切都已经运行了好几个月

SystemJS.set('systemjs', SystemJS.newModule(SystemJS));
对于
sinon
来说,类似的方法已经运行了好几个月,我希望在模块使用
require('SystemJS')
时,我可以使用完全相同的方法使已经可用的
SystemJS
可用。但它不起作用

这是模块在其
要求后看到的内容:

需要
“>

实际的SystemJS模块内容位于
Symbol():tt
下面

我相信答案非常简单,但是SystemJS的文档对我没有帮助,这当然可能完全是我自己的错,但事实就是如此,我不得不在两个小时后询问,没有结果。我也花了一段时间来进行当前的设置,包括阅读SystemJS源代码,我明白了这一切都是我自己说的,但我认为这个微小而非常具体的问题可能有理由提出这样一个问题

为了完成对设置的描述(对于那些好奇的人):我从WebStorm运行它,目录设置是一个普通的node.js项目,带有
/test/
/src/
/lib/
,当然还有
/node\u modules/
。html文件是
/test/index.html
,我告诉WebStorm“运行”“它是,因此WS充当测试的Web服务器


浏览器测试
#错误预处理{
宽度:50em;
边缘:2米4米;
填充:1em;
边框:1px纯红;
}
/*全球系统*/
摩卡咖啡设置(“bdd”);
//此黑客切换依赖于系统的组件,以便
//具有node.js特定代码的模块的语句将交换为它们的
//浏览器版本。
const resolvorig=SystemJS.constructor.prototype.resolve;
SystemJS.constructor.prototype.resolve=函数(键,父项){
返回resolvorig.call(SystemJS,key.replace('-nodejs.js','-browser.js'),parents);
};
// ======================================================
//相关部分(我尝试的内容)
//这项工作:
SystemJS.set('sinon',SystemJS.newModule(sinon));
//这不起作用:
SystemJS.set('SystemJS',SystemJS.newModule(SystemJS));
// ======================================================
//这些是我想在浏览器中运行的./test/中的测试脚本
常量mochaTestScripts=[
//…简表。。。。
“加密助手”,
“地图查询”,
“对象帮助程序”,
“存储”
];
SystemJS.config({
地图:{
“chai”:“../node_modules/chai/chai.js”,
“chai as promised”:“../node_modules/chai as promised/lib/chai as promised.js”,
//蔡依从承诺
“检查错误”:“../node_modules/check error/check error.js”,
“js-sha256”:“../node_modules/js-sha256/build/sha256.min.js”
}
});
我保证(
mochaTestScripts.map(testScript=>
SystemJS.import('./'+testScript+'-test.js')
.catch(错误=>{
const div=document.getElementById('errors');
const pre=document.createElement('pre');
pre.appendChild(document.createTextNode('Test:'+testScript+'\n\n'+err));
儿童分部(学前);
})
)
)
.然后(()=>{
摩卡。检查泄漏();
摩卡环球([]);
mocha.run();
})
.catch(错误=>{
const div=document.getElementById('errors');
const pre=document.createElement('pre');
pre.appendChild(document.createTextNode('GLOBAL ERROR\n'+err));
儿童分部(学前);
});

我自己解决了:

我必须去SystemJS的源代码中找到答案。问题似乎在于
SystemJS
符号不像通常那样只是一个普通的对象,其中方法是直接位于该对象内部的属性。相反,
SystemJS
是一个实例,方法在原型上

最终起作用的是SystemJS如何在内部使用
newModule
,最终起作用的命令是

SystemJS.registry.set(
    'systemjs',
    SystemJS.newModule({default: SystemJS, __useDefault: true})
);
这将替换上面
index.html
testrunner文件中
//这不起作用:
下的行