在Jasmine中运行javascript es6代码
我正在angularjs应用程序中探索JavaScript es6代码,并使用grunt babel将es6编译为es5 我的单元测试(jasmine)没有使用phantomjs运行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
运行测试的最佳方式是什么?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)代码。