应该可以使用任何Chai插件与Karma / Mocha和Chai进行单元测试,还是需要将其转换为特殊的karma兼容插件?
我想使用chai-date-string来执行类似expect(requestBody.time).to.be.a.dateString();
的操作,但是将它们安装为NPM模块并将其放在我的测试文件中并没有任何好运。
然后我遇到了karma-chai-plugins,我认为它被设计为使用其他chai插件(甚至超出它捆绑的少数插件),但是将其添加为NPM模块,然后添加Chai插件名称到框架列表,但这没有用。
我的karma.conf.js
:
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['mocha', 'chai', 'chai-date-string', 'sinon-chai', 'browserify'],
client: { chai: { includeStack: true } },
files: [ 'playmob.js', 'test/**/*_test.js' ],
preprocessors: {
'test/**/*.js': [ 'browserify' ]
},
browserify: {
debug: true,
},
exclude: [ ],
reporters: ['mocha', 'beep'],
mochaReporter: { ignoreSkipped: true },
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['ChromeHeadless'],
singleRun: false,
concurrency: Infinity
})
}
package.json
中的版本(我必须明确安装较新版本的chai-as-promised
以解决依赖性问题):
"devDependencies": {
"browserify": "^14.4.0",
"chai": "^4.1.2",
"chai-as-promised": "^7.1.1",
"chai-date-string": "^0.1.0",
"karma": "^1.7.1",
"karma-beep-reporter": "^0.1.4",
"karma-browserify": "^5.1.1",
"karma-chai-plugins": "^0.9.0",
"karma-chrome-launcher": "^2.2.0",
"karma-cli": "^1.0.1",
"karma-mocha": "^1.3.0",
"karma-mocha-reporter": "^2.2.4",
"karma-sinon-chai": "^1.3.2",
"mocha": "^3.5.3",
"sinon": "^2.4.1",
"sinon-chai": "^2.14.0",
"uglifyjs": "^2.4.11",
"url": "^0.11.0",
"watchify": "^3.9.0"
}
导致以下错误:
> playmobjs@0.2.0 test /Users/jschuur/Code/Playmob/js_api_lib
> karma start
/Users/jschuur/Code/Playmob/js_api_lib/node_modules/di/lib/injector.js:9
throw error('No provider for "' + name + '"!');
^
Error: No provider for "framework:chai-date-string"! (Resolving: framework:chai-date-string)
at error (/Users/jschuur/Code/Playmob/js_api_lib/node_modules/di/lib/injector.js:22:12)
答案 0 :(得分:1)
当我查看karma-chai-plugins
的代码时,我看到了一系列hardcoded plugin names。在我看来,karma-chai-plugins
只识别那些源代码中硬编码的Chai插件。因此,我认为您不能将其用于chai-date-string
。
此外,chai-date-string
不是以易于在浏览器中加载的格式分发的。您可以使用Browserify或Webpack将其转换为将chaiDateString
之类的内容导出到全局空间的文件。然后你必须:
加入files
转换后的chai-date-string
脚本。
在files
中添加另一个调用chai.use(chaiDateString)
的脚本。回购中显示的example code省略了对chai.use
的调用,但不能省略。