我的代码与系统无关,并且在node.js或浏览器上运行很少的系统相关代码行。我已经设法设置基于mocha的测试,以便它可以在这两种环境中工作,使用相同的测试和相同的代码模块。我还管理浏览器测试环境,以自动交换那些极少数依赖于系统的程序包的调用,这些程序包总是调用浏览器版本的node.js版本。
所以一切都在运行,包括mocha和sinon以及所有测试。
直到我决定使用SystemJS不仅用于运行测试,还用于代码本身。
node.js部分仍在运行,包括测试。当我运行浏览器测试时会出现问题。
对于那些我使用运行测试的index.html文件的人,下面是完整的。
请注意,这与以后的任何生产浏览器环境无关,在这个早期阶段,我想要的只是测试代码(纯粹基于网络和存储,没有任何GUI的东西,使用上的IndexedDB我已经对浏览器提供了node.js和浏览器上的浏览器和websockets 。
关键是线 - 新线,唯一的其他线已经工作了几个月
SystemJS.set('systemjs', SystemJS.newModule(SystemJS));
sinon
的类似问题已经好几个月了,我希望当模块使用SystemJS
时,我可以使用完全相同的方法使已有的require('systemjs')
可用。但它不起作用。
这是模块在require
:
实际的SystemJS模块内容位于Symbol(): tt
。
我确定答案是非常简单,但SystemJS的文档对我没有任何帮助,当然这可能完全是我自己的错,但事实就是如此,两个小时后我得问无结果。我花了一段时间才得到当前的设置,包括必须阅读SystemJS源代码,我自己想出来,但我认为这个微小且非常具体的问题对于SO问题可能是合理的吗?
只是为了完成设置的描述(对于那些好奇的人):我从WebStorm运行它,目录设置是一个通常的node.js项目./test/
,./src/
,{ {1}},当然还有./lib/
。 html文件是./node_modules/
,我告诉WebStorm“运行”它,因此WS充当测试的网络服务器。
./test/index.html
答案 0 :(得分:0)
我自己解决了这个问题:
我必须转到SystemJS的源代码才能找到答案。问题似乎是SystemJS
符号不仅仅是通常的普通对象,其中方法是直接在此对象内的属性。相反,SystemJS
是一个实例,方法在原型上。
最终起作用的是SystemJS在内部使用newModule
的方式,以及最终有效的命令
SystemJS.registry.set(
'systemjs',
SystemJS.newModule({default: SystemJS, __useDefault: true})
);
这将替换上述// THIS DOES NOT WORK:
测试运行器文件中index.html
下的行。