这是我第一次测试JS前端,因此我选择了mocha。
我有一门课,可以说它Market
使用了我制作的其他课。
我使用import ... from ...
条款,export default Market
最后。
所以Market
类看起来像这样:
import { math, AnotherClass, MyOtherClass } from '../index.js'
class Market {
constructor () {
// code here
}
methodToTest(input) {
// some code here ...
return output
}
}
export default Market
然后是我的test.js
var assert = require('assert')
// import { Market } from '../public/mm/ai/Market.js'
var Market = require('../public/mm/ai/Market')
describe('Market', function() {
describe('#methodToTest()', function() {
it('should return 0 input is greater than mean + 4 * sigma', function() {
var market = new Market()
assert.equal(market.methodToTest(45), 0)
})
})
})
在运行测试后,我得到了错误:
import { math, AnotherClass, MyOtherClass } from '../index.js'
^^^^^^
SyntaxError: Cannot use import statement outside a module
和错误堆栈。
问题是:如何通过这些导入使Mocha测试我的模块?
如您所见,我也尝试直接在test.js中使用import,它也失败了。但是我不想重写我的整个项目以使用require
它,因为它在浏览器中的运行状况非常好。
所以我自己找到了解决方案。
首先,.mocharc.js文件将mocha配置为使用babel和chai:
module.exports = {
require: ['chai', '@babel/register'],
ui: 'bdd',
// ui: 'tdd',
reporter: 'spec',
growl: false,
};
我选择的用户界面:“BDD”因为我用的是描述在test.js:describe('Market class:', function() {
其次,我在package.json中添加了babel配置:
"babel": {
"env": {
"test-console": {
"presets": ["@babel/preset-env"],
"plugins": ["@babel/plugin-proposal-class-properties"]
}
,
"test": {
"presets": ["@babel/preset-env"],
"plugins": ["@babel/plugin-proposal-class-properties", "transform-remove-console"]
}
}
},
与控制台输出一起使用的两种环境。
它导致package.json脚本部分执行其中之一:
"scripts": {
"test": "BABEL_ENV=test mocha || TRUE",
"test-console-log": "BABEL_ENV=test-console mocha || TRUE"
},
现在我已经准备好执行test.js并在模块中进行导入了。
这是test.js的负责人:
var assert = require('chai').assert
import Market from '../public/mm/ai/Market.js'
...
考虑自己的模块时,我切换为导入。
webpack配置中的所有内容:
var path = require('path');
const TerserPlugin = require('terser-webpack-plugin')
module.exports = {
mode: 'none',
entry: './test/test.js',
output: {
path: path.resolve(__dirname, 'test/'),
filename: 'exec_test.js'
},
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
plugins: ['@babel/plugin-proposal-class-properties']
}
}
}
]
},
optimization: {
minimize: true,
minimizer: [new TerserPlugin({
terserOptions: {
compress:
{
drop_console: true
}
}
})]
}
};
然后您可以通过以下方式构建和运行它:
"scripts": {
"build-tests-webpack": "webpack --config webpack.config.test.js",
"exec test": "mocha --ui bdd test/exec_test.js"
}
在package.json中
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句