在Jasmine中运行javascript es6代码

在Jasmine中运行javascript es6代码,javascript,angularjs,jasmine,ecmascript-6,grunt-babel,Javascript,Angularjs,Jasmine,Ecmascript 6,Grunt Babel,我正在angularjs应用程序中探索JavaScript es6代码,并使用grunt babel将es6编译为es5 我的单元测试(jasmine)没有使用phantomjs运行es6代码 运行测试的最佳方式是什么?jasmine是否可以使用任何插件来运行es6代码?您可以将jasmine配置为使用Babel作为助手,并动态转换代码 安装巴别塔寄存器模块: npm install --save-dev babel-register 并将其注册为茉莉花助手 在spec/support/jas

我正在angularjs应用程序中探索JavaScript es6代码,并使用grunt babel将es6编译为es5

我的单元测试(jasmine)没有使用phantomjs运行es6代码


运行测试的最佳方式是什么?jasmine是否可以使用任何插件来运行es6代码?

您可以将jasmine配置为使用Babel作为助手,并动态转换代码

安装巴别塔寄存器模块:

npm install --save-dev babel-register
并将其注册为茉莉花助手

spec/support/jasmine.json文件中进行以下更改:

{
  "helpers": [
    "../node_modules/babel-register/lib/node.js"
  ]
}
有关更多信息,请参阅Github上的存储库

默认情况下,Babel6.x不附带任何已启用的转换。您需要明确地告诉它要运行哪些转换。您已经在使用Babel,因此应该安装这些模块。如果没有,您可以使用npm安装ES2015预设:

npm install babel-preset-es2015 --save-dev
假设您已经安装了Babel和ES2015预设,为了启用它,您必须在
.babelrc
文件中定义它,如下所示:

{
  "presets": ["es2015"]
}

我花了相当长的时间让巴贝尔和茉莉花合作,所以我应该在这里发布我的解决方案:

安装
babel cli
软件包,执行标准的babel配置(对我来说是
.babelrc
文件)

我创建了自定义运行程序文件:
bin/jasmine

#!/usr/bin/env bash
./node_modules/.bin/babel-node ./node_modules/.bin/jasmine $@ --config=spec/support/jasmine.json

这样,即使是传递参数也能起作用<代码>bin/jasmine-h
而配置路径总是方便地定义

这里是一个关于Babel 7+、jasmine 3.5.0项目结构的最小设置示例:

☁  jasmine-examples [master] ⚡  tree -a -L 3 -I "node_modules|coverage|.git|.nyc_output"
.
├── .babelrc
├── .editorconfig
├── .gitignore
├── .nycrc
├── .prettierrc
├── LICENSE
├── README.md
├── jasmine.json
├── package-lock.json
├── package.json
└── src
    ├── helpers
    │   ├── console-reporter.js
    │   └── jsdom.js
    └── stackoverflow
        ├── 60138152
        ├── 61121812
        ├── 61277026
        ├── 61643544
        └── 61985831

8 directories, 12 files
依赖性:

"@babel/preset-env": "^7.9.6",
"@babel/register": "^7.9.0",
"jasmine": "^3.5.0",
npm脚本:

"scripts": {
  "test": "jasmine --config=./jasmine.json",
  "coverage": "nyc npm run test && nyc report --reporter=html"
}
jasmine.json

{
  "spec_dir": "src",
  "spec_files": ["**/?(*.)+(spec|test).[jt]s?(x)"],
  "helpers": ["helpers/**/*.js", "../node_modules/@babel/register/lib/node.js"],
  "stopSpecOnExpectationFailure": false,
  "random": true
}
.babelrc

{
  "presets": ["@babel/preset-env"]
}
在这里,我们需要注意
助手的文件路径

jasmine规范之前包含的与spec_dir相关的文件路径(和glob)数组

助手
选项中的文件路径是相对于spec_dir的不是相对项目根路径。这意味着你应该使用

"../node_modules/@babel/register/lib/node.js"
不是

"./node_modules/@babel/register/lib/node.js"
src/61985831/myClass.js

导出类MyClass{
构造函数(){}
}
src/61985831/myClass.spec.js

从“/MyClass”导入{MyClass};
描述('我的类',函数(){
var myClassInstance;
beforeach(函数(){
myClassInstance=新的MyClass();
});
它('是MyClass'函数()的实例){
expect(myClassInstance).toBeInstanceOf(MyClass);
});
});
测试结果如下:

茉莉花-examples@1.0.0test/Users/ldu020/workspace/github.com/mrdulin/jasmine-examples >jasmine--config=./jasmine.json“/Users/ldu020/workspace/github.com/mrdulin/jasmine examples/src/stackoverflow/61985831/myClass.spec.js” 正在执行1个已定义的规范。。。 以随机顺序运行。。。(种子:66758) 测试套件和规格: (节点:57105)实验警告:fs.API是实验性的 1.我的班级 ✔ 是MyClass的实例(4ms) >>完成了! 总结:
查看karma网页包并使用网页包构建您的测试。这是我的工作。谢谢。看起来不错,不使用因果报应有可能吗?目前,我正在为单元测试编写Transfile(es6到es5)代码。