2015-10-05 65 views
0

进行笑话测试我想弄清楚如何在我的respondJS ES6应用程序中进行单元测试。我的应用程序已经使用es6模块系统,使用jspm/babel将其转换为systemJs。使用es6 + jspm + systemjs + reactJS

我发现babel-jest作为预处理器,但即使有它,我也无法运行我的测试,因为jest无法找到SystemJs。 (“系统没有定义”在控制台示出误差)

在浏览器中,如JSPM文档中说明的那样,SystemJs全局加载。我想我应该在我的预处理器中加载SystemJs,但是如何让我的测试中加载额外的模块可以使用systemJs?

在此先感谢

+0

PS。我试图理解如何使它工作,所以如果我在做错错误,请告诉我什么! – nemenos

+0

你有没有找到解决方案? – user5325596

+0

我不再使用笑话了。转换到简单的茉莉花。有了Jasmine,karma,jspm karma插件,我可以运行单元测试,但是当我想要模拟依赖关系时仍然存在一些麻烦,但是我认为我应该多学习一下systemjs,并且当我有时间时,我应该设法做到这一点。 .. – nemenos

回答

0

不幸的是,玩笑并没有在此刻支持SystemJS ES6模块。

请参见下面的注释:

所以,它听起来像笑话假设基于节点解析算法的模块解决。

不幸的是,这与SystemJS的分辨率算法不兼容。

如果有人通过API设置“自定义解析器”算法,那么我们可以将jspm插入开玩笑,但我不确定这是否可行。

- Comment by Guy Bedford,SystemJS的创造者,2015年6月


这是不可能这样会有[SystemJS],除非它是一个社区贡献的官方支持。

- Comment by @cpojer,玩笑合作者,2016年1月


也看到了以下问题:Invalid URL is thrown when requiring systemjs in jest test cases

+0

是的 - cpojer评论说你和我联系实际上是他和我之间的一个快速交流的一部分,我试图让Jest和jspm工作。我认为随着jspm/systemjs采用速度的加快,我们将在未来六个月内看到解决方案。 –

+0

啊我现在看到了,谢谢@ShawnErquhart。让我们希望你是对的!六个月你的直觉还是我错过了一些信息? –

+0

纯肠。也许更好的方法来描述它:如果没有标准,夏季时可用的基本jspm/Jest设置,我会感到惊讶。 –

0
本质

获得玩笑发挥好与JSPM/SystemJS您运行的应用程序需要“教”它关于它保存在config.js文件中的所有映射(或者你调用System。配置())

长的答复是,你需要为你已经安装了JSPM这样每个相关的条目:

//jest configuration 
moduleNameMapper: {  
    ... 
    "^redux$": "[email protected]", 
    ... 
} 

你有每个别名,你至少需要一个项:

moduleNameMapper: {  
     ... 
     "^common\\/(.*)": "<rootDir>/src/common/$1", //for a dir alias 
     "^actions$": "<rootDir>/src/actions/index", //for a file alias 
     ... 
} 

你还需要在你的nodeNameMapper有这些映射:

moduleNameMapper: {  
    ... 
     "^npm:(.*)": "<rootDir>/jspm_packages/npm/$1", 
      "^github:(.*)": "<rootDir>/jspm_packages/github/$1", 
    ... 
} 

最后,你需要有这个moduleDirectories配置:

moduleDirectories: ["node_modules", "jspm_packages/npm", "jspm_packages/github"] 

这个心不是真的实用,因为你不想让你的所有依赖注册表的两个副本,并有当他们改变它们同步...

所以更好答案,你用我的gulp-jest-jspm插件:)

即使你不使用gulp,你也可以使用它的getJestConfig()方法在你运行Jest之前为你生成配置。附件号码:

相关问题